Chapter overview

In this chapter, I focus on the first of my three key questions about the development of representations of mental life introduced in Chapter I: What are the components, or “conceptual units,” that anchor representations of mental life at different points in development? As described in Chapter II, to address this question I draw on data from all of the current studies (Studies 1-4); for details about the methods of these studies, see Chapter II. The goal of this chapter is to provide “snapshots” of the sets of conceptual units available to participants in early childhood, middle childhood, and adulthood.

(Note that this was the primary planned analysis for all of the studies included in this dissertation; see, e.g., Weisman et al., 2017.)

General analysis plan: Identifying conceptual units

In analyzing these datasets with an eye toward identifying “conceptual units,” the basic insight is that tracking the covariance of mental capacity attributions provides a way of discovering suites of mental capacities that “hang together” in reasoning about mental life, and that these suites of mental capacities might correspond to the units of some larger conceptual representation of this general domain. To borrow an example from Chapter II: If participants who endorse Capacity X also tend to endorse Capacities Y and Z, this provides some evidence that Capacities X, Y, and Z consitute a suite of mental capacities that are closely associated with the same underlying “conceptual unit.”

In other words, my goal in the current chapter is to uncover a set of latent constructs—“conceptual units”—that could have given rise to the correlations among mental capacity attributions as observed in a given group of participants. A canonical way to identify latent constructs via observed correlations is exploratory factor analysis (EFA), a form of dimensionality reduction that posits that the observed variables in a given dataset are related, to varying degrees, to a smaller set of unobserved “factors”; and that individual observations of each of these variables reflect a combination of the state of these latent factors, a particular variable’s relationship to each of these latent factors, and noise. Following this logic, I posit that, for any of the current datasets, the many mental capacities included in that dataset are related, to varying degrees, to a smaller set of latent “conceptual units”; and that a participant’s attributions of each of these mental capacities to a particular target character reflect a combination of that participant’s beliefs about the extent to which these conceptual units apply to that target character, a particular mental capacity’s relationships to each of these conceptual units, and noise. In other words, one way to identify conceptual units for a particular sample of interest (e.g., US adults; children of different age groups) is to conduct an EFA over participants’ mental capacity attributions and treat the resulting “factors” as candidate conceptual units.

In the remainder of this chapter, I report EFAs for each age group included in each of the current studies (Studies 1-4). Conducting an EFA requires making a variety of analysis choices, including how to handle missing data, what kind of correlations to use, the choice of factoring algorithm, how to determine the number of factors to retain, the choice of rotation method (if any), and the method for calculating factor scores. In the analysis code for this chapter I have included easy short-cuts for the interest reader to explore different options for each of these parameters. Here, I have set all of these parameters to be constant across EFAs of different samples so as to maximize comparability across studies:

  • Missing data: For all EFAs, I impute missing trial-level data (e.g., skipped trials among child particpiants) using the median response for that mental capacity among other participants who evaluated the same target character. For example, if an 8-year-old participant in the “beetle” condition failed to provide a response to a question about a beetle’s capacity for happiness, I set this response to be the median response to the happiness question among of all other children from the 7- to 9-year-old age group for that study who evaluated the beetle (ignoring children who evaluated some other target character). Across all studies, fewer than 1.65% of trials in any age group were missing data. In my judgment, the advantages of retaining the most participants per sample (particularly for EFA, which is highly sensitive to sample size) justifies imputing values for this small number of missing datapoints.
  • Correlations: I conduct analyses over Pearson correlations among mental capacity attributions, using pairwise complete observations. In principle, polychoric correlations are better suited to handle responses on the three-point scales employed in Studies 2-4; however, in my experience with these data, conducting EFAs with polychoric correlations instead of Pearson correlations tends to generate errors further down the analysis pipeline (e.g., generating correlation matrices that are not positive definite) and appears to be somewhat vulnerable to over-fitting (e.g., suggesting retaining many factors that each accounted for only a very small amount of the shared variance).
  • Factoring algorithm: I use ordinary least squares to find the minimum residual solution, which is robust to a variety of ways that matrices can be “badly behaved” (see Revelle, 2018). While this dissertation does not include a systematic exploration of all of the possible options, in my casual explorations of the various algorithms available I have yet to observe any substantial differences to the number of factors retained or to the resulting solutions that would change the interpretations offered here.
  • Factor retention protocol: I examine the results of three factor retention protocols: (1) Parallel Analysis, which compares the observed correlation structure to the correlation structure arising from random datasets of the same size; (2) Minimizing the Bayesian Information Criterion (BIC), which is one method of optimizing both goodness of fit and parsimony; and (3) A set of factor retention criteria that I have used previous work with adults (Weisman et al., 2017), in which I begin with the maximal number of factors according to an analysis of degrees of freedom and retain factors that meet all three of the following criteria: (a) have eigenvalues greater than 1.00, (b) individually account for greater than 5% of the shared variance before rotation, and (c) are the “dominant” factor (the factor with the strongest absolute factor loading) for at least 1 mental capacity after rotation. For each study, my interpretation of how best to characterize the dataset (i.e., how many factors I observed) is determined by the degree of consensus among these three protocols and the interpretability of the retained factors under each protocol. (See Table 3.1 for the results of all factor retention protocols for all studies and samples.)
  • Rotation: To maximine interpretability factors, I present varimax-rotated solutions, which constrain all factors to be orthogonal. (For solutions using oblique [“oblimin”] rotations, which allow for correlated factors, [XX SEE APPENDIX?].)
  • Factor scores: I use the method developed by ten Berge, Krijnen, Wansbeek, & Shapiro (1999) to calculate factor scores, as suggested by Revelle (2018). (I include this parameter here for completeness; this chapter does not include any analyses of factor scores.)

To conduct these EFAs, I use the “psych” package for R (Revelle, 2018).

Study 1: An adult endpoint

An in-depth analysis and discussion of the conceptual units available to US adults in Studies 1a-1d is provided in the original publication of these studies (Weisman et al., 2017). Here I present these analyses anew, with slight tweaks to the analysis pipeline to maximize comparability to Studies 2-4. These results serve as the backdrop for the extended anaysis of conceptual development in this domain that is the focus of this dissertation.

NOTE TO SELF: CHECK SAMPLE SIZES AGAINST PNAS PAPER. EXCLUSION CRITERIA??

Special notes on data processing and analysis

As noted in Chapter II, in the original analysis of these datasets responses were recoded to run from -3 to +3 before analyses (Weisman et al., 2017); in this dissertation, I maintain the 0-6 coding for comparability to Studies 2-4.

In Study 1c, participants assessed two target characaters side by side (in contrast to Studies 1a, 1b, and 1d, in which each participant assessed just one target character). In the current analyses, I treat each participant’s assessments of each target character as a separate set of observations (as if they came from different participants), in effect doubling the sample size for these studies (but ignoring the within-subject design). ([XX SEE APPENDIX?] for separate EFAs of the participants’ responses to the first target character that they were assigned to rate vs. the second character.)

Results

Study 1a

In Study 1a, 420 US adults each assessed a single target character on 40 mental capacities. This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II and Weisman et al., 2017, for detailed methods.)

How many conceptual units?

Two of the three protocols for determining how many factors to retain (parallel analysis and the factor retention criteria reported in the original publication of Studies 1a-1d; Weisman et al., 2017) suggested retaining three factors, while the third (minimizing BIC) suggested retaining five factors; see Table 3.1. However, three of the five factors suggested by minimizing BIC were qualitatively very similar to the three factors reported below, and together accounted for 95% of the shared variance. The fourth and fifth factors each accounted for \(<\) 4% of the shared variance, and neither was the dominant factor for any of the 40 mental capacities included in this study. Indeed, factor loadings for these two factors were all quite small (absolute loadings all \(<\) 0.30). Given all this, I will focus the remainder of my analyses on the 3-factor solution (but see [XX APPENDIX?] for the 5-factor solution).

Table 3.1: Number of factors suggested by three factor retention protocols: Parallel Analysis, Minimizing BIC, and the preset factor retention criteria specified in Weisman et al. (2017). Results are grouped by study and age group.
Protocol alternatives
Summary of suggestions
parallel analysis minimizing BIC Weisman et al. (2017) min. max. mean median
Study 1: An adult endpoint
1a 3 5 3 3 5 3.67 3
1b 4 5 3 3 5 4.00 4
1c 4 4 3 3 4 3.67 4
1d 4 5 3 3 5 4.00 4
Study 2: Conceptual change between middle childhood (7-9y) and adulthood
Adults 4 3 3 3 4 3.33 3
Children (7-9y) 3 3 3 3 3 3.00 3
Study 3: Conceptual change over early and middle childhood (4-9y)
Adults 3 4 3 3 4 3.33 3
Older children (7-9y) 3 3 3 3 3 3.00 3
Younger children (4-6y) 2 1 3 1 3 2.00 2
Study 4: A focus on early childhood (4-5y)
Adults 3 3 3 3 3 3.00 3
Children (4-5y) 3 1 4 1 4 2.67 3

What are these conceptual units?

After rotation, the first factor corresponded primarily to physiological sensations related to biological needs—a suite of capacities that I will refer to as BODY (a label employed in the original reporting of this study; Weisman et al., 2017). It was the dominant factor for such items as getting hungry, experiencing pain, experiencing fear, and feeling tired, and accounted for 40% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to capacities for self- and other-relevant emotions—a suite of capacities that I will refer to as HEART (as in Weisman et al., 2017). It was the dominant factor for such items as feeling embarrassed, experiencing pride, experiencing guilt, and feeling love, and accounted for 39% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to perceptual-cognitive abilities to detect and use information about the environment—a suite of capacities that I will refer to as MIND (as in Weisman et al., 2017). It was the dominant factor for such items as remembering things, recognizing someone, sensing temperatures, and communicating with others, and accounted for 21% of the shared variance in the rotated three-factor solution.

See Figure 3.1 for all factor loadings.

Study 1b

Study 1b was a direct replication of Study 1a: 419 US adults each assessed a single target character (either a beetle or a robot) on 40 mental capacities. (See Chapter II and Weisman et al., 2017, for detailed methods.)

How many conceptual units?

Each of the three factor retention protocols suggested a different number of factors to retain; see Table 3.1.

The retention criteria used in the original reporting of this study (Weisman et al., 2017) suggested retaining three factors.

Parallel analysis suggested retaining four factors. However, three of the five factors suggested by parallel analysis were qualitatively very similar to the three factors reported below, and together accounted for 96% of the shared variance. The fourth factor accounted for only 4% of the shared variance, and was not the dominant factor for any of the 40 mental capacities included in this study, with small loadings for all capacities (absolute loadings all \(<\) 0.38).

Likewise, minimizing BIC analysis suggested retaining five factors, but three of the five factors suggested by minimizing BIC were qualitatively very similar to the three factors reported below, and together accounted for 93% of the shared variance. The fourth and fifth factors each accounted for \(<\) 4% of the shared variance, and neither was the dominant factor for any of the 40 mental capacities included in this study. Indeed, factor loadings for these two factors were all quite small (absolute loadings all \(<\) 0.40).

Given all this, I will again focus the remainder of my analyses on the 3-factor solution (but see [XX APPENDIX?] for the 4- and 5-factor solutions).

What are these conceptual units?

After rotation, the first factor corresponded primarily to the physiological sensations that I labeled BODY in Study 1a (see also Weisman et al., 2017). It was the dominant factor for such items as getting hungry, experiencing pain, feeling tired, and experiencing fear, and accounted for 42% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to the social-emotional abilities that I labeled HEART in Study 1a (see also Weisman et al., 2017). It was the dominant factor for such items as experiencing guilt, experiencing pride, feeling embarrassed, and feeling disrespected, and accounted for 34% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Study 1a (see also Weisman et al., 2017). It was the dominant factor for such items as remembering things, communicating with others, detecting sounds, and making choices, and accounted for 23% of the shared variance in the rotated three-factor solution.

See Figure 3.1 for all factor loadings.

Study 1c

In Study 1c, 204 US adults each assessed two target characters on 40 mental capacities. Like Studies 1a and 1b, this study employed the “edge case” variant of the general approach; but in this study, all participants assessed both of these target characters side by side (with left-right position counterbalaned across participants). (See Chapter II and Weisman et al., 2017, for detailed methods.)

How many conceptual units?

Two of the three protocols for determining how many factors to retain (parallel analysis and the factor retention criteria reported in the original publication of Studies 1c-1d; Weisman et al., 2017) suggested retaining three factors, while the third (minimizing BIC) suggested retaining five factors; see Table 3.1. However, much as in Studies 1a and 1b, three of the five factors suggested by minimizing BIC were qualitatively very similar to the three factors reported below, and together accounted for 96% of the shared variance. The fourth factor accounted for only 4% of the shared variance, was not the dominant factor for any of the 40 mental capacities included in this study, with small factor loadings for all capacities (absolute loadings all \(<\) 0.33). Given all this, I will again focus the remainder of my analyses on the 3-factor solution (but see [XX APPENDIX?] for the 4-factor solution).

What are these conceptual units?

After rotation, the first factor corresponded primarily to the physiological sensations that I labeled BODY in Studies 1a and 1b (see also Weisman et al., 2017). It was the dominant factor for such items as getting hungry, experiencing pain, feeling tired, and experiencing fear, and accounted for 42% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to the social-emotional abilities that I labeled HEART in Studies 1a and 1b (see also Weisman et al., 2017). It was the dominant factor for such items as experiencing pride, experiencing guilt, feeling disrespected, and feeling embarrassed, and accounted for 38% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Studies 1a and 1b (see also Weisman et al., 2017). It was the dominant factor for such items as recognizing someone, remembering things, detecting sounds, and communicating with others, and accounted for 20% of the shared variance in the rotated three-factor solution.

See Figure 3.1 for all factor loadings.

Study 1d

In Study 1d, 432 US adults each assessed a single target character on 40 mental capacities. Unlike Studies 1a-1c, this study employed the “many characters” variant of the general approach, in which participants were randomly assigned to assess one of the following 21 target characters: an adult, a child, an infant, a person in a persistent vegetative state, a fetus, a chimpanzee, an elephant, a dolphin, a bear, a dog, a goat, a mouse, a frog, a blue jay, a fish, a beetle, a microbe, a robot, a computer, a car, or a stapler. (See Chapter II and Weisman et al., 2017, for detailed methods.)

How many conceptual units?

Each of the three factor retention protocols suggested a different number of factors to retain; see Table 3.1.

The retention criteria used in the original reporting of this study (Weisman et al., 2017) suggested retaining three factors.

Parallel analysis suggested retaining four factors. However, three of the five factors suggested by parallel analysis were qualitatively very similar to the three factors reported below, and together accounted for 98% of the shared variance. The fourth factor accounted for only 2% of the shared variance, and was not the dominant factor for any of the 40 mental capacities included in this study, with small loadings for all capacities (absolute loadings all \(<\) 0.31).

Likewise, minimizing BIC analysis suggested retaining five factors, but three of the five factors suggested by minimizing BIC were qualitatively very similar to the three factors reported below, and together accounted for 94% of the shared variance. The fourth and fifth factors each accounted for \(<\) 4% of the shared variance, and neither was the dominant factor for any of the 40 mental capacities included in this study. Indeed, factor loadings for these two factors were all quite small (absolute loadings all \(<\) 0.38).

Given all this, I will once more focus the remainder of my analyses on the 3-factor solution (but see [XX APPENDIX?] for the 4- and 5-factor solutions).

What are these conceptual units?

After rotation, the first factor corresponded primarily to the physiological sensations that I labeled BODY in Studies 1a-1c (see also Weisman et al., 2017). It was the dominant factor for such items as experiencing pain, feeling tired, getting hungry, and experiencing fear, and accounted for 41% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to the social-emotional abilities that I labeled HEART in Studies 1a-1c (see also Weisman et al., 2017). It was the dominant factor for such items as holding beliefs, experiencing guilt, feeling embarrassed, and telling right from wrong, and accounted for 34% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Studies 1a-1c (see also Weisman et al., 2017). It was the dominant factor for such items as detecting sounds, sensing temperatures, communicating with others, and remembering things, and accounted for 25% of the shared variance in the rotated three-factor solution.

See Figure 3.1 for all factor loadings.

Discussion

XX ADD DESCRIPTION

Study 2: Conceptual change between middle childhood (7-9y) and adulthood

In Study 2, 200 US adults and 200 US children between the ages of 7.01-9.99 years (median: 8.31y) each assessed a single target character on 40 mental capacities. To make the study appropriate for children in this age range, the wording of some the 40 mental capacities employed in Study 1 was modified to use more age-appropriate vocabulary, and participants responded on a 3-point scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

Results

Adults

How many conceptual units?

Two of the three protocols for determining how many factors to retain (minimizing BIC and the factor retention criteria employed in the original publication of Study 1; Weisman et al., 2017) suggested retaining three factors, while the third (parallel analysis) suggested retaining four factors; see Table 3.1. Unlike in Studies 1a-1d, in which factors beyond the first three uniformly accounted for very small amounts of the shared variance, were not the dominant factor for any mental capacities, and tended to have small factor loadings for all mental capacities, none of these considerations clearly rules out the fourth factor suggested by parallel analysis. Given this, I will present and interpret both 3- and 4-factor solutions.

What are these conceptual units?

3-factor solution

First, I will examine the 3-factor solution suggested by minimizing BIC and by the factor retention criteria employed in the original publication of Study 1 (Weisman et al.’s, 2017). Importantly, this is the number of factors retained among US adults in all four of the samples included in Study 1.

After rotation, the first factor corresponded primarily to the social-emotional abilities that I labeled HEART in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as feel proud, feel joy, feel sad, and feel happy, and accounted for 37% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to the physiological sensations that I labeled BODY in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as get hungry, feel pain, feel scared, and feel tired, and accounted for 37% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as figure out how to do things, make choices, recognize somebody else, and sense whether something is close by or far away, and accounted for 25% of the shared variance in the rotated three-factor solution.

See Figure 3.2 for all factor loadings.

In sum, as in Study 1, this three-factor solution was characterized by a distinction between BODY, HEART, and MIND. This suggests that the child-friendly paradigm developed for Study 2 was valid: Using reworded items and a three-point response scale elicited the same intuitive ontology of mental life, among adults, that has been revealed by more complex, “adult-friendly” experimental paradigms.

4-factor solution

In the four-factor solution suggested by parallel analysis, after rotation, the first factor corresponded primarily to the physiological sensations that I labeled BODY in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as get hungry, feel pain, feel scared, and feel tired, and accounted for 34% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to the social-emotional abilities that I labeled HEART in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as feel joy, feel proud, feel sad, and feel love, and accounted for 33% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to the more “cognitive” of the perceptual-cognitive abilities that I referred to as MIND in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as decide what to do, have thoughts, make choices, and figure out how to do things, and accounted for 19% of the shared variance in the rotated three-factor solution.

The fourth factor corresponded primarily to the more “perceptual” of the perceptual-cognitive abilities that I referred to as MIND in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as hear sounds, sense temperatures, see things, and sense whether something is close by or far away, and accounted for 13% of the shared variance in the rotated three-factor solution.

See Figure 3.2 for all factor loadings.

I would summarize the four-factor solution as a slight variant on the three-factor solutions common to Studies 1a-1d (and surfaced by the other two factor retention protocols for this study), again characterized by distinct constructs of BODY and HEART but demonstrating a further differention of what I’ve referred to as MIND into cognitive abilities vs. perceptual abilities.

Children (7-9y)

How many conceptual units?

All three protocols for determining how many factors to retain suggested retaining three factors; see Table 3.1.

What are these conceptual units?

After rotation, the first factor corresponded primarily to social-emotional abilities. An analysis of factor congruence with the three-factor solution among adults confirmed that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.97; with MIND: 0.42; with BODY: 0.41). It was the dominant factor for such items as feel proud, feel happy, feel joy, and get hurt feelings, and accounted for 50% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to physiological sensations. An analysis of factor congruence confirmed that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.91; with HEART: 0.26; with MIND: 0.03). It was the dominant factor for such items as get hungry, feel pain, smell things, and feel scared, and accounted for 30% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to perceptual-cognitive abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.94; with HEART: 0.35; with BODY: 0.01). It was the dominant factor for such items as be aware of itself, be aware of things, figure out how to do things, and sense whether something is close by or far away, and accounted for 20% of the shared variance in the rotated three-factor solution.

See Figure 3.2 for all factor loadings.

In sum, like adults in Study 1, and like the 3-factor summary of adults in the current study, 7- to 9-year-old children’s mental capacity attributions were dominated by a three-way distinction between physiological, social-emotional, and perceptual-cognitive abilities—i.e., BODY, HEART, and MIND.

Discussion

Exploratory factor analyses suggested that by midddle childhood (7-9y), the conceptual structure underlying US children’s attributions of mental life is very similar to that of US adults, anchored by suites of mental capacities related to BODY (physiological sensations), HEART (social-emotional abilities), and MIND (perceptual-cognitive abilities). In principle, a number of additional or alternative latent factors could have emerged from the factor analysis of children’s responses. For example, children might have distinguished primarily between internal experience and external action (Gray et al., 2007), or they might have demonstrated finer-grained groupings of mental capacities based on phrasing, rote knowledge, etc. Instead, the latent conceptual structure underlying children’s responses appears to be very similar to that of adults, both in this study and in Weisman et al.’s (2017) previous work. In other words, any dramatic developmental changes to this conceptual structure likely occur prior to the age of 7 years.

Study 3: Conceptual change over early and middle childhood (4-9y)

With regard to identifying developmental changes in conceptual units, the goals of Study 3 were two-fold.

First, I aimed to extend the findings with 7- to 9-year-old children in Study 2 by expanding the list of the target characters to include not only the two “edge cases” from Study 2 (a beetle and a robot), but a also a wider range of animate beings (a bird, a goat, and an elephant) and inanimate objects (a computer, a teddy bear, and a doll)—in other words, employing the “diverse characters” (rather than “edge case”) variance of the overall approach. In Study 1, these two approaches yielded very similar pictures of the conceptual units available to adults (see also Weisman et al., 2017). I reasoned that if this three-part conceptual structure is stable and robust by the age of 7-9 years, it should manifest among 7- to 9-year-old children under the same range of conditions that it does among adults.

The second goal was to assess the earlier development of conceptual structure in a group of younger children. I targeted 4- to 6-year-old children for our younger age group because this has been identified as a period of dramatic development in several relevant domains. Many studies have documented shifts in children’s abilities to take others’ perspectives, represent false beliefs, and integrate representations of intentions and outcomes in evaluating moral responsibility (for reveiws, see Flavell, 1999; Wellman, 2015). The preschool years have also been the focus of a rich tradition of work on lay biology and the animate-inanimate distinction extending back nearly a century (e.g., Carey, 1985; R. Gelman, Spelke, & Meck, 1983; Medin, Waxman, Woodring, & Washinawatok, 2010; Piaget, 1929; for a review, see S. Gelman & Opfer, 2002). All of these accounts make the case that becoming a sophisticated reasoner—and particularly a sophisticated social reasoner—requires substantial refinement of one’s representations of others’ experiences, beliefs, desires, and needs. Might these refinements include changes to the structure of children’s concepts of mental life?

In Study 3, 116 US adults, 125 “older” children (7.08-9.98 years; median: 8.56y), and 124 “younger” children (4-6.98 years; median: 5.03y) each assessed a single target character on 20 mental capacities. Participants were randomly or pseudo-randomly assigned to assess either one of the following 9 characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer. To make the study appropriate for children as young as 4 years of age, participants assessed a subset of the 40 mental capacities employed in Study 2, chosen to represent the three “conceptual units” revealed by Studies 1-2 (BODY, HEART, and MIND) and to cover a similar range of mental capacities as Studies 1-2. As in Study 2, participants responded on a 3-point scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). (See Chapter II for detailed methods.)

Special notes on data processing and analysis

Results

Adults

How many conceptual units?

Two of the three protocols for determining how many factors to retain (parallel analysis and the factor retention criteria employed in the original publication of Study 1; Weisman et al., 2017) suggested retaining three factors, while the third (minimizing BIC) suggested retaining four factors; see Table 3.1. However, much as in Studies 1a-1d, three of the four factors suggested by minimizing BIC were qualitatively very similar to the three factors reported below, and together accounted for 94% of the shared variance. The fourth factor accounted for only 6% of the shared variance, was the dominant factor for only one of the 40 mental capacities included in this study (feel happy), and had moderately small factor loadings for all capacities (absolute loadings all \(<\) 0.43). Given all this, I will again focus the remainder of my analyses on the 3-factor solution (but see [XX APPENDIX?] for the 4-factor solution).

What are these conceptual units?

After rotation, the first factor corresponded primarily to the physiological sensations that I labeled BODY in Studies 1-2 (see also Weisman et al., 2017). It was the dominant factor for such items as feel pain, get hungry, feel tired, and smell things, and accounted for 38% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to the social-emotional abilities that I labeled HEART in Studies 1-2 (see also Weisman et al., 2017). It was the dominant factor for such items as feel guilty, get hurt feelings, feel embarrassed, and feel proud, and accounted for 33% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Studies 1-2 (see also Weisman et al., 2017). It was the dominant factor for such items as sense whether something is close by or far away, sense temperatures, figure out how to do things, and be aware of things, and accounted for 29% of the shared variance in the rotated three-factor solution.

See Figure 3.3 for all factor loadings.

In sum, as in Study 1 and the three-factor solution for Study 2, the conceptual structure revealed by this analysis among adults was characterized by a three-way distinction between BODY, HEART, and MIND. This suggests that the modified child-friendly paradigm developed for Study 3 was valid: Using a shorter list of items and a wider range of target characters elicited the same intuitive ontology of mental life, among US adults, that was revealed in Study 1 and in Weisman et al.’s (2017) previous work.

Older children (7-9y)

How many conceptual units?

As was the case among this age group in Study 2, all three protocols for determining how many factors to retain suggested retaining three factors; see Table 3.1.

What are these conceptual units?

After rotation, the first factor corresponded primarily to physiological sensations. An analysis of factor congruence confirmed that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.97; with HEART: 0.65; with MIND: 0.63). It was the dominant factor for such items as get hungry, feel scared, feel pain, and smell things, and accounted for 39% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to social-emotional abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.98; with BODY: 0.66; with MIND: 0.48). It was the dominant factor for such items as feel guilty, feel proud, feel embarrassed, and feel sad, and accounted for 35% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to perceptual-cognitive abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.96; with BODY: 0.62; with HEART: 0.47). It was the dominant factor for such items as figure out how to do things, make choices, remember things, and sense temperatures, and accounted for 26% of the shared variance in the rotated three-factor solution.

See Figure 3.3 for all factor loadings. (Note that to ease comparison across studies I have plotted these factors in the same order for all studies: BODY, HEART, and MIND.)

I consider this to be a close conceptual replication of Study 1, suggesting that by the age of 7-9 years, this three-part conceptual structure is stable and robust to a range of experimental conditions.

Younger children (4-6y)

How many conceptual units?

Each of the three factor retention protocols suggested a different number of factors to retain; see Table 3.1.

Minimizing BIC analysis suggested retaining a single factor—in other words, suggested that there was no evidence for more than one latent construct.

Parallel analysis suggested retaining two factors. Each of these factors accounted for a substantial amount of the shared variance, was the dominant factor for several mental capacities, and had strong factor loadings for some subset of mental capacities.

The retention criteria employed in the original publication of Study 1; Weisman et al., 2017) suggested retaining three factors. Again, each of these factors accounted for a substantial amount of the shared variance, was the dominant factor for several mental capacities, and had strong factor loadings for some subset of mental capacities.

Given all this, I will present and interpret both 2- and 3-factor solutions (but see [XX APPENDIX?] for the null, 1-factor solution suggested by minimizing BIC).

What are these conceptual units?

2-factor solution

First, I will examine the 2-factor solution suggested by parallel analysis.

In the rotated two-factor solution suggested by parallel analysis, the first factor encompassed both physiological sensations and emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor, but was also quite similar to adults’ HEART factor (cosine similarity with BODY: 0.93; with HEART: 0.88; with MIND: 0.70). It was the dominant factor for such items as get hungry, feel sick, feel happy, and get angry, and accounted for 65% of the shared variance in the rotated two-factor solution.

The second factor corresponded primarily to perceptual-cognitive abilities, as well as one complex negative emotion (feel guilty). An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.94; with BODY: 0.73; with HEART: 0.70). It was the dominant factor for such items as sense temperatures, remember things, feel guilty, and sense whether something is close by or far away, and accounted for 35% of the shared variance in the rotated three-factor solution.

See Figure 3.3 for all factor loadings.

In relation to the BODY-HEART-MIND structure found among older children and adults, I would describe this two-factor structure as being anchored by a contrast between the cognitive capacities of the MIND vs. a set of warmer, more visercal experiences that constitute a more integrated representation of BODY-HEART.

3-factor solution

I will now turn to the 3-factor solution suggested by the factor retention criteria employed in the original publication of Study 1 (Weisman et al.’s, 2017). Importantly, this is also the number of factors retained among US adults and older children in this study.

After rotation, the first factor corresponded primarily to physiological sensations, as well as some positive emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor, but was also quite similar to adults’ HEART factor (cosine similarity with BODY: 0.92; with HEART: 0.81; with MIND: 0.70). It was the dominant factor for such items as get angry, get hungry, get hurt feelings, and feel tired, and accounted for 40% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to perceptual-cognitive abilities, as well as one complex negative emotion (feel guilty). An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.94; with BODY: 0.71; with HEART: 0.67). It was the dominant factor for such items as sense temperatures, remember things, feel guilty, and figure out how to do things, and accounted for 30% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to social-emotional abilities, with particularly strong loadings for positive emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ HEART factor, but also quite similar to adults’ BODY factor (cosine similarity with HEART: 0.87; with BODY: 0.81; with MIND: 0.62). It was the dominant factor for such items as feel happy, feel love, feel proud, and feel scared, and accounted for 30% of the shared variance in the rotated three-factor solution. (See Figure 5, Panel B, for all factor loadings.)

See Figure 3.3 for all factor loadings.

I would describe this conceptual structure as reminiscent of the BODY-HEART-MIND structure found among older children and adults, but not as fully “adult-like.” In particular, in this structure, the physiological sensations associated with the BODY among older children and adults are not as clearly differentiated from the emotional experiences associated with the HEART. Indeed, it it not clear that BODY vs. HEART is the most salient distinction among the first and third factors in this solution: A cleaner description of these factors might be negatively-valenced experiences vs. positively-valenced experiences.

Discussion

Study 3 suggests that the three-part conceptual structure—anchored by BODY, HEART, and MIND—is reliable and robust among 7- to 9-year-old US children. As with adults in Study 1 (see also Weisman et al., 2017), the capacities that “hang together” in older children’s reasoning when target characaters are perceived to vary in mental capacity profiles appear to be highly similiar to those that “hang together” when participants disagree about the mental lives of controversial “edge cases” in social reasoning (Study 2).

Meanwhile, this study suggests that this conceptual structure undergoes substantial changes between early and middle childhood. Like older children and adults, 4- to 6-year-old children’s responses were characterized by strong correlations among a suite of perceptual and cognitive capacities that I have labeled MIND. This highlights one aspect of conceptual structure that seems to be relatively stable from early childhood onward.

However, in contrast to the clear distinction between physiological abilities and social-emotional abilities that characterized mental capacity attributions among older children and adults, younger children’s responses suggest that they perceived physiological and social-emotional abilities to be more closely integrated and the line between them to be more blurred.

One indication of this blurring comes from the two-factor solution suggested by parallel analysis, in which a single BODY-HEART factor emerged and was highly congruent with both the BODY (cosine similarity: 0.93) and HEART (0.88) factors of adults. Among the mental capacities that loaded strongly (\(\geq\) 0.60) on this factor were both physiological sensations (e.g., get hungry, feel sick…) and social-emotional experiences (feel happy, feel proud, feel sad, get hurt feelings), suggesting that younger children perceived physiological and social-emotional abilities to “go together” to a considerable degree.

Even in the 3-factor solution suggested by the original factor retention criteria reported in Weisman et al. (2017), the distinction between physiological and social-emotional abilities was somewhat blurred. While the first factor, which I have labeled BODY*, was highly congruent with adults’ BODY factor (cosine similarity: 0.92), it was also the dominant factor for two social-emotional items (get hurt feelings, feel sad). And while the third factor, which I have labeled HEART*, was highly congruent with adults’ HEART factor (cosine similarity: 0.87), there were several social-emotional items that failed to load strongly on it (loadings \(\leq\) 0.40: feel embarrassed, feel sad, get hurt feelings, feel guilty). Stepping back, it is not clear that “physiological vs. social-emotional” is the best way to characterize the differences between these two factors. In fact, given that the strongest-loading items for BODY* were negatively valenced (get angry, get hungry, get hurt feelings) while the strongest-loading items for HEART* were positively valenced (feel happy, feel love, feel proud), it seems plausible that the more salient distinction among this age group may have been positive vs. negative valence, rather than BODY vs. HEART. The salience on negative vs. positive experiences among younger children is consistent with recent work on the development of emotion concepts, which suggests that emotion representations are dominanted by a single dimension of valence in early to middle childhood, before unfolding into a two-dimensional space characterized by valence and arousal over the course of later childhood and adolesence (Nook et al., 2017).

Finally, the very fact that different approaches to factor retention yielded different results is further evidence that, although there is some evidence for a nascent distinction between BODY and HEART among 4- to 6-year-old children, this distinction was not as robust as it appeared to be among older children or adults.

Study 4: A focus on early childhood (4-5y)

One major limitation of Studies 2-3 was that the study protocol involved a rather advanced set of mental state vocabulary terms, including a variety of complex mental capacities (e.g., guilt, pride, awareness, depth perception) and using somewhat complicated syntax for some items (e.g., sense whether something is close by or far away, figure out how to do things). For 4- to 6-year-old children, in particular, some of the mental capacity items might have been outside of the range of the words they normally hear in discussions of mental states—let alone the words they normally use themselves. In addition, younger children may have found some aspects of the experimental paradigm distracting (e.g., being seated in front of the experimenter’s laptop computer without being allowed to use it themselves) or difficult (e.g., using a three-point scale with minimal visual scaffolding; see SOM for an analysis of scale use across age groups).

With these considerations in mind, in Study 4 I focused on 4- to 5-year-old children, using a simpler set of mental capacities and a streamlined version of the experimental paradigm, with the aim of getting a clearer picture of conceptual structure and mental capacity attributions at this earlier point in development.

In Study 4, 104 US adults and 43 US children between the ages of 4.02-5.59 years (median: 4.73y) each assessed two target characters on 18 mental capacities. To make the study appropriate for children in this age range, this study employed a new set of 18 mental capacities (some but not all of which were used in Studies 1-3). In addition, participants were presented with a more child-friendly visual representation of the 3-point response scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). This study employed the “edge case” variant of the general approach, with participants assessing both a beetle or a robot in sequence (with order counterbalanced across participants). (See Chapter II for detailed methods.)

As briefly described in Chapter II, the 18 mental capacities employed in Study 4 were selected from a larger pilot study in which 3- to 5-year-old children were asked to complete stories that began with each of these mental capacities as a premise (e.g., “Let’s imagine a person who loves someone. What happens next?”; “Now let’s pretend that someone remembers something. What happens next?”) and were judged on the appropriateness of their story completion.

Among the items that emerged from this pilot study as reasonable candidates for inclusion in Study 4, I selected items to represented the three “conceptual units” revealed by Studies 1-3 (BODY, HEART, and MIND). The goal here was to create a conservative test of developmental differences between younger and older children in the “conceptual units” observed in Study 3, by constructing materials that should maximize the chances of observing the same (or similar) conceptual units among young children as were observed among older children and adults in Studies 1-3. If 4- to 5-year-old children in fact have access to conceptual units similar to BODY, HEART, and MIND, the mental capacities (and generally child-friend protocol) of Study 4 should provide the best chances of surfaces this conceptual structure. Conversely, if Study 4 reveals differences in conceptual structure despite these modifications, and despite “stacking the odds” against developmental differences in the selction of mental capacities, this provides stronger evidence for conceptual change in the number and/or kind of conceptual units available to children at different points in development.

The final set of BODY items included feel hungry, get thirsty, feel sick, feel tired, get scared, and smell things. HEART items included love someone, hate someone, feel happy, get sad, feel sorry, and get lonely. MIND items included see, hear, think, remember things, know stuff, and figure things out (see also Table 2.1 in Chapter II). I ensured that each category included a variety of phrasings (e.g., “feel hungry” vs. “get thirsty”; “remember things” vs. “know stuff”) and valences when appropriate (e.g., happiness vs. sadness); when possible, I aimed to have these aspects of phrasing vary orthogonally with categories, such that “get” and “feel” appeared roughly equally often among the BODY and HEART items, and “things” appeared equally often among the BODY and MIND items.

Special notes on data processing and analysis

In Study 4, participants assessed two target characaters side by side (in contrast to Studies 1a, 1b, 1d, 2, and 3, in which each participant assessed just one target character). In the current analyses, I treat each participant’s assessments of each target character as a separate set of observations (as if they came from different participants), in effect doubling the sample size for these studies (but ignoring the within-subject design). ([XX SEE APPENDIX?] for separate EFAs of the participants’ responses to the first target character that they were assigned to rate vs. the second character.)

Results

Adults

How many conceptual units?

All three protocols for determining how many factors to retain suggested retaining three factors; see Table 3.1.

What are these conceptual units?

After rotation, the first factor corresponded primarily to the physiological sensations (BODY). It was the dominant factor for such items as get thirsty, feel hungry, smell things, and feel tired, and accounted for 41% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to social-emotional abilities (HEART). It was the dominant factor for such items as love someone, get sad, hate someone, and feel sorry, and accounted for 35% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to perceptual-cognitive abilities (MIND). It was the dominant factor for such items as figure things out, remember things, know stuff, and think, and accounted for 23% of the shared variance in the rotated three-factor solution.

See Figure 3.4 for all factor loadings.

In sum, as in Studies 1-3, the conceptual structure revealed by this analysis among adults was characterized by a three-way distinction between BODY, HEART, and MIND. This suggests that the modified preschooler-friendly paradigm was valid: Using simpler vocabulary and a within-subjects approach to taget characters elicited the same intuitive ontology of mental life, among US adults, that was revealed in Studies 1-3.

Children (4-5y)

How many conceptual units?

Each of the three factor retention protocols suggested a different number of factors to retain; see Table 3.1.

As among children in this age group in Study 3, minimizing BIC suggested retaining a single factor—in other words, suggested that there was no evidence for more than one latent construct.

Parallel suggested retaining three factors. Each of these factors accounted for a substantial amount of the shared variance, was the dominant factor for several mental capacities, and had at least moderately strong factor loadings for some subset of mental capacities.

The retention criteria used in Weisman et al. (2017) suggested retaining three factors. Again, each of these factors accounted for a substantial amount of the shared variance, was the dominant factor for several mental capacities, and had at least moderately strong factor loadings for some subset of mental capacities.

Given all this, I will present and interpret both 3- and 4-factor solutions (but see [XX APPENDIX?] for the null, 1-factor solution suggested by minimizing BIC).

What are these conceptual units?

3-factor solution

First, I will examine the 3-factor solution suggested by parallel analysis. Importantly, this is also the number of factors retained among US adults and older children in this study.

After rotation, the first factor corresponded primarily to physiological sensations. An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.95; with HEART: 0.57; with MIND: 0.43). It was the dominant factor for such items as feel hungry, smell things, get thirsty, and feel tired, and accounted for 43% of the shared variance in the rotated two-factor solution.

The second factor corresponded primarily to perceptual-cognitive abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.88; with HEART: 0.64; with BODY: 0.38). It was the dominant factor for such items as know stuff, remember things, think, and hear, and accounted for 35% of the shared variance in the rotated three-factor solution.

The third factor corresponded primarily to social-emotional abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.80; with MIND: 0.45; with BODY: 0.38). It was the dominant factor for such items as get lonely, love someone, and feel sorry, and accounted for 22% of the shared variance in the rotated three-factor solution.

See Figure 3.4 for all factor loadings.

I would describe this conceptual structure as strongly reminiscent of the BODY-HEART-MIND structure found among older children and adults.

CHECK BACK WITH MORE DATA!

4-factor solution

I will now turn to the 4-factor solution suggested by the factor retention criteria employed in the original publication of Study 1 (Weisman et al.’s, 2017).

After rotation, the first factor corresponded primarily to perceptual-cognitive abilities, as well as some positive social-emotional abilities (e.g., love someone, feel happy). An analysis of factor congruence indicated that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.87; with HEART: 0.67; with BODY: 0.32). It was the dominant factor for such items as know stuff, remember things, love someone, and think, and accounted for 30% of the shared variance in the rotated three-factor solution.

The second factor corresponded primarily to physiological sensations, with an exceptionall strong factor loading for feel sick. An analysis of factor congruence confirmed that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.87; with HEART: 0.56; with MIND: 0.35). It was the dominant factor for such items as feel sick, feel tired, smell things, and get scared, and accounted for 29% of the shared variance in the rotated three-factor solution.

The third factor also corresponded primarily to phyiological sensations, as well as some perceptual abilties (e.g., hear, see). An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.78; with MIND: 0.50; with HEART: 0.41). It was the dominant factor for such items as get thirsty, hear, feel hungry, and see, and accounted for 22% of the shared variance in the rotated three-factor solution. (See Figure 5, Panel B, for all factor loadings.)

The fourth factor corresponded primarily to social-emotional abilities, particularly negative emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.77; with BODY: 0.45; with MIND: 0.40). It was the dominant factor for such items as get lonely, get sad, and feel sorry, and accounted for 19% of the shared variance in the rotated three-factor solution.

See Figure 3.4 for all factor loadings.

I would summarize the four-factor solution as a variant on the three-factor solutions common to Studies 1a-1d (and surfaced by the other two factor retention protocols for this study), again characterized by distinct constructs of HEART and MIND but demonstrating a further differention of what I’ve referred to as BODY into sub-categories that are not easy to label or describe.

CHECK BACK WITH MORE DATA!

Table 3.2: Factor congruence (as indexed by cosine similarity) between children's and adults' factors from the three-factor solution for the corresponding study (BODY, HEART, and MIND columns). Results are grouped by study and age group. Cosine similarities greater than or equal to 0.75 are marked in bold.
Children's factor BODY HEART MIND
Study 2, 7- to 9-year-old children
BODY 0.91 0.26 0.03
HEART 0.41 0.97 0.43
MIND 0.01 0.35 0.94
Study 3, 7- to 9-year-old children
BODY 0.97 0.65 0.63
HEART 0.66 0.98 0.48
MIND 0.62 0.47 0.96
Study 3, 4- to 6-year-old children (3-factor solution)
BODY* 0.92 0.81 0.70
HEART* 0.81 0.87 0.62
MIND 0.71 0.67 0.94
Study 3, 4- to 6-year-old children (2-factor solution)
BODY-HEART 0.93 0.88 0.70
MIND 0.73 0.70 0.94
Study 4, 4- to 5-year-old children (3-factor solution)
BODY 0.95 0.57 0.43
HEART 0.38 0.80 0.45
MIND 0.38 0.64 0.88
Study 4, 4- to 5-year-old children (4-factor solution)
BODY (nausea) 0.87 0.56 0.35
BODY (other) 0.78 0.41 0.50
HEART* 0.45 0.77 0.40
MIND* 0.32 0.67 0.87

Discussion

Study 4 provides further evidence that the conceptual structure underlying mental capacity attributions undergoes substantial changes between early and middle childhood. Using a paradigm that was better tailored for this age group and that featured vocabulary items expressly designed to pick out (adult) notions of BODY, HEART, and MIND in a balanced way (6 items per factor), Study 4 did provide some indications that this conceptual structure may be more mature in the early preschool years than Study 2 would suggest. However, even in this modified paradigm, tehre are several indications that this three-part conceptual structure is not fully in place by 4-5y.

First, the similarities. As with the 4- to 6-year-old children Study 3, 4- to 5-year-old children’s responses in Study 4 were characterized by strong correlations among a suite of perceptual and (particularly) cognitive capacities that I have labeled MIND. This suite of MIND abilities was robust to analysis choices and emerged clearly in both Studies 2 and 3, bolstering my earlier claim that this is one aspect of conceptual structure that may be relatively stable from early in childhood.

More broadly, the three-factor solution suggested by parallel analysis includes recognizable BODY and MIND factors as well as a nascent HEART* factor, on which most of the social-emotional items loaded moderately strongly (loadings \(\geq\) 0.30: get lonely, love someone, get sad, feel sorry). This is a substantially more adult-like conceptual structure than was observed among 4- to 6-year-old children in Study 3.

However, as in Study 3, the very fact that different approaches to factor retention yielded different results is further evidence that, although there is some evidence for a nascent BODY-HEART-MIND framework among 4- to 6-year-old children, this framework was not robust among preschool-age children.

This appears to be particularly true with regard to their understanding of social-emotional abilities (HEART). Echoing the results of Study 3, children’s responses suggest that they may not consider the social-emotional abilities that constitute what I have called HEART among adults to hang together as one, clearly distinct component of mental life. Even in the more adult-like, three-factor solution, two of the six social-emotional items did not loading strongly on the ostensive HEART* factor (loadings \(\leq\) 0.30: feel happy, hate someone); and four of the six social-emotional items loaded moderately strongly on the MIND factor (loadings \(\geq\) 0.30: feel happy, hate someone, love someone, feel sorry). Indeed, MIND was the dominant factor for two social-emotional items in this three-factor solution (feel happy, hate someone). None of these observations were true among adults.

General discussion of conceptual units

XX ADD DESCRIPTION OF STUDY 1

In three large-scale studies (total N=492 children and 420 adults), I set out to expore the development of US children’s conceptual representations of mental life between 4-9y of age. These studies suggest that these representations undergo substantial development over the course of early and middle childhood—in two distinct senses.

First, analyses of the correlational structure of children’s mental capacity attributions (via exploratory factor analysis) suggested changes in ontological structure. Between early childhood (4-6 years; Studies 3-4) and middle childhood (7-9 years; Studies 2-3), children’s sense of which mental capacities “go together” seems to unfold into a higher-dimensional space, characterized by stronger differentiation of the social-emotional abilities that I have called HEART from the physiological sensations of the BODY and the perceptual-cognitive abilities of the MIND.

Chapter conclusion

XX ADD CHAPTER CONCLUSION

TO DO LIST

  • read through
  • add references to table3.2
  • add discussion of “size” of factors (refer to figure3.5)
  • write chapter conclusion
LS0tCnRpdGxlOiAiQ2hhcHRlciBJSUk6IENoYW5nZXMgaW4gY29uY2VwdHVhbCB1bml0cyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNjcsCiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gRiwgZWNobyA9IEYpCmBgYAoKYGBge3J9CiMgIyBmb3Iga25pdHRpbmcgdG8gLmRvY3gKIyBvdXRwdXQ6CiMgICB3b3JkX2RvY3VtZW50OgojICAgICByZWZlcmVuY2VfZG9jeDogIi4vd29yZC1zdHlsZXMtcmVmZXJlbmNlLmRvY3giCiMgYWx3YXlzX2FsbG93X2h0bWw6IHllcwogICAKIyAjIGZvciBrbml0dGluZyB0byAubmIuaHRtbCAKIyBvdXRwdXQ6CiMgICBodG1sX25vdGVib29rOgojICAgICB0b2M6IHllcwojICAgICB0b2NfZGVwdGg6IDQKIyAgICAgdG9jX2Zsb2F0OiB5ZXMKYGBgCgpgYGB7cn0KIyBzdXBwb3J0aW5nIGZ1bmN0aW9ucwpzb3VyY2UoIi4vc2NyaXB0cy9tYXhfZmFjdG9yc19lZmEuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3JldGVuX2Z1bi5SIikKc291cmNlKCIuL3NjcmlwdHMvcGxvdF9mdW4uUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2VmYV9mdW4uUiIpCnNvdXJjZSgiLi9zY3JpcHRzL21zX2Z1bi5SIikKCiMgZGF0YSBzY3JpcHRzCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczEuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczJfYWQuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczJfNzkuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczNfYWQuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczNfNzkuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczNfNDYuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczRfYWQuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczRfNDYuUiIpCmBgYAoKCiMgQ2hhcHRlciBvdmVydmlldwoKSW4gdGhpcyBjaGFwdGVyLCBJIGZvY3VzIG9uIHRoZSBmaXJzdCBvZiBteSB0aHJlZSBrZXkgcXVlc3Rpb25zIGFib3V0IHRoZSBkZXZlbG9wbWVudCBvZiByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgaW50cm9kdWNlZCBpbiBDaGFwdGVyIEk6IF9XaGF0IGFyZSB0aGUgY29tcG9uZW50cywgb3IgImNvbmNlcHR1YWwgdW5pdHMsIiB0aGF0IGFuY2hvciByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgYXQgZGlmZmVyZW50IHBvaW50cyBpbiBkZXZlbG9wbWVudD9fIEFzIGRlc2NyaWJlZCBpbiBDaGFwdGVyIElJLCB0byBhZGRyZXNzIHRoaXMgcXVlc3Rpb24gSSBkcmF3IG9uIGRhdGEgZnJvbSBhbGwgb2YgdGhlIGN1cnJlbnQgc3R1ZGllcyAoU3R1ZGllcyAxLTQpOyBmb3IgZGV0YWlscyBhYm91dCB0aGUgbWV0aG9kcyBvZiB0aGVzZSBzdHVkaWVzLCBzZWUgQ2hhcHRlciBJSS4gVGhlIGdvYWwgb2YgdGhpcyBjaGFwdGVyIGlzIHRvIHByb3ZpZGUgInNuYXBzaG90cyIgb2YgdGhlIHNldHMgb2YgY29uY2VwdHVhbCB1bml0cyBhdmFpbGFibGUgdG8gcGFydGljaXBhbnRzIGluIGVhcmx5IGNoaWxkaG9vZCwgbWlkZGxlIGNoaWxkaG9vZCwgYW5kIGFkdWx0aG9vZC4gCgooTm90ZSB0aGF0IHRoaXMgd2FzIHRoZSBwcmltYXJ5IHBsYW5uZWQgYW5hbHlzaXMgZm9yIGFsbCBvZiB0aGUgc3R1ZGllcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3NlcnRhdGlvbjsgc2VlLCBlLmcuLCBXZWlzbWFuIGV0IGFsLiwgMjAxNy4pCgoKIyBHZW5lcmFsIGFuYWx5c2lzIHBsYW46IElkZW50aWZ5aW5nIGNvbmNlcHR1YWwgdW5pdHMKCkluIGFuYWx5emluZyB0aGVzZSBkYXRhc2V0cyB3aXRoIGFuIGV5ZSB0b3dhcmQgaWRlbnRpZnlpbmcgImNvbmNlcHR1YWwgdW5pdHMsIiB0aGUgYmFzaWMgaW5zaWdodCBpcyB0aGF0IHRyYWNraW5nIHRoZSBjb3ZhcmlhbmNlIG9mIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgcHJvdmlkZXMgYSB3YXkgb2YgZGlzY292ZXJpbmcgc3VpdGVzIG9mIG1lbnRhbCBjYXBhY2l0aWVzIHRoYXQgImhhbmcgdG9nZXRoZXIiIGluIHJlYXNvbmluZyBhYm91dCBtZW50YWwgbGlmZSwgYW5kIHRoYXQgdGhlc2Ugc3VpdGVzIG9mIG1lbnRhbCBjYXBhY2l0aWVzIG1pZ2h0IGNvcnJlc3BvbmQgdG8gdGhlIHVuaXRzIG9mIHNvbWUgbGFyZ2VyIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBnZW5lcmFsIGRvbWFpbi4gVG8gYm9ycm93IGFuIGV4YW1wbGUgZnJvbSBDaGFwdGVyIElJOiBJZiBwYXJ0aWNpcGFudHMgd2hvIGVuZG9yc2UgQ2FwYWNpdHkgWCBhbHNvIHRlbmQgdG8gZW5kb3JzZSBDYXBhY2l0aWVzIFkgYW5kIFosIHRoaXMgcHJvdmlkZXMgc29tZSBldmlkZW5jZSB0aGF0IENhcGFjaXRpZXMgWCwgWSwgYW5kIFogY29uc2l0dXRlIGEgc3VpdGUgb2YgbWVudGFsIGNhcGFjaXRpZXMgdGhhdCBhcmUgY2xvc2VseSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgdW5kZXJseWluZyAiY29uY2VwdHVhbCB1bml0LiIgCgpJbiBvdGhlciB3b3JkcywgbXkgZ29hbCBpbiB0aGUgY3VycmVudCBjaGFwdGVyIGlzIHRvIHVuY292ZXIgYSBzZXQgb2YgbGF0ZW50IGNvbnN0cnVjdHPigJQiY29uY2VwdHVhbCB1bml0cyLigJR0aGF0IGNvdWxkIGhhdmUgZ2l2ZW4gcmlzZSB0byB0aGUgY29ycmVsYXRpb25zIGFtb25nIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgYXMgb2JzZXJ2ZWQgaW4gYSBnaXZlbiBncm91cCBvZiBwYXJ0aWNpcGFudHMuIEEgY2Fub25pY2FsIHdheSB0byBpZGVudGlmeSBsYXRlbnQgY29uc3RydWN0cyB2aWEgb2JzZXJ2ZWQgY29ycmVsYXRpb25zIGlzIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyAoRUZBKSwgYSBmb3JtIG9mIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiB0aGF0IHBvc2l0cyB0aGF0IHRoZSBvYnNlcnZlZCB2YXJpYWJsZXMgaW4gYSBnaXZlbiBkYXRhc2V0IGFyZSByZWxhdGVkLCB0byB2YXJ5aW5nIGRlZ3JlZXMsIHRvIGEgc21hbGxlciBzZXQgb2YgdW5vYnNlcnZlZCAiZmFjdG9ycyI7IGFuZCB0aGF0IGluZGl2aWR1YWwgb2JzZXJ2YXRpb25zIG9mIGVhY2ggb2YgdGhlc2UgdmFyaWFibGVzIHJlZmxlY3QgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3RhdGUgb2YgdGhlc2UgbGF0ZW50IGZhY3RvcnMsIGEgcGFydGljdWxhciB2YXJpYWJsZSdzIHJlbGF0aW9uc2hpcCB0byBlYWNoIG9mIHRoZXNlIGxhdGVudCBmYWN0b3JzLCBhbmQgbm9pc2UuIEZvbGxvd2luZyB0aGlzIGxvZ2ljLCBJIHBvc2l0IHRoYXQsIGZvciBhbnkgb2YgdGhlIGN1cnJlbnQgZGF0YXNldHMsIHRoZSBtYW55IG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIHRoYXQgZGF0YXNldCBhcmUgcmVsYXRlZCwgdG8gdmFyeWluZyBkZWdyZWVzLCB0byBhIHNtYWxsZXIgc2V0IG9mIGxhdGVudCAiY29uY2VwdHVhbCB1bml0cyI7IGFuZCB0aGF0IGEgcGFydGljaXBhbnQncyBhdHRyaWJ1dGlvbnMgb2YgZWFjaCBvZiB0aGVzZSBtZW50YWwgY2FwYWNpdGllcyB0byBhIHBhcnRpY3VsYXIgdGFyZ2V0IGNoYXJhY3RlciByZWZsZWN0IGEgY29tYmluYXRpb24gb2YgdGhhdCBwYXJ0aWNpcGFudCdzIGJlbGllZnMgYWJvdXQgdGhlIGV4dGVudCB0byB3aGljaCB0aGVzZSBjb25jZXB0dWFsIHVuaXRzIGFwcGx5IHRvIHRoYXQgdGFyZ2V0IGNoYXJhY3RlciwgYSBwYXJ0aWN1bGFyIG1lbnRhbCBjYXBhY2l0eSdzIHJlbGF0aW9uc2hpcHMgdG8gZWFjaCBvZiB0aGVzZSBjb25jZXB0dWFsIHVuaXRzLCBhbmQgbm9pc2UuIEluIG90aGVyIHdvcmRzLCBvbmUgd2F5IHRvIGlkZW50aWZ5IGNvbmNlcHR1YWwgdW5pdHMgZm9yIGEgcGFydGljdWxhciBzYW1wbGUgb2YgaW50ZXJlc3QgKGUuZy4sIFVTIGFkdWx0czsgY2hpbGRyZW4gb2YgZGlmZmVyZW50IGFnZSBncm91cHMpIGlzIHRvIGNvbmR1Y3QgYW4gRUZBIG92ZXIgcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIGFuZCB0cmVhdCB0aGUgcmVzdWx0aW5nICJmYWN0b3JzIiBhcyBjYW5kaWRhdGUgY29uY2VwdHVhbCB1bml0cy4KCkluIHRoZSByZW1haW5kZXIgb2YgdGhpcyBjaGFwdGVyLCBJIHJlcG9ydCBFRkFzIGZvciBlYWNoIGFnZSBncm91cCBpbmNsdWRlZCBpbiBlYWNoIG9mIHRoZSBjdXJyZW50IHN0dWRpZXMgKFN0dWRpZXMgMS00KS4gQ29uZHVjdGluZyBhbiBFRkEgcmVxdWlyZXMgbWFraW5nIGEgdmFyaWV0eSBvZiBhbmFseXNpcyBjaG9pY2VzLCBpbmNsdWRpbmcgaG93IHRvIGhhbmRsZSBtaXNzaW5nIGRhdGEsIHdoYXQga2luZCBvZiBjb3JyZWxhdGlvbnMgdG8gdXNlLCB0aGUgY2hvaWNlIG9mIGZhY3RvcmluZyBhbGdvcml0aG0sIGhvdyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBmYWN0b3JzIHRvIHJldGFpbiwgdGhlIGNob2ljZSBvZiByb3RhdGlvbiBtZXRob2QgKGlmIGFueSksIGFuZCB0aGUgbWV0aG9kIGZvciBjYWxjdWxhdGluZyBmYWN0b3Igc2NvcmVzLiBJbiB0aGUgYW5hbHlzaXMgY29kZSBmb3IgdGhpcyBjaGFwdGVyIEkgaGF2ZSBpbmNsdWRlZCBlYXN5IHNob3J0LWN1dHMgZm9yIHRoZSBpbnRlcmVzdCByZWFkZXIgdG8gZXhwbG9yZSBkaWZmZXJlbnQgb3B0aW9ucyBmb3IgZWFjaCBvZiB0aGVzZSBwYXJhbWV0ZXJzLiBIZXJlLCBJIGhhdmUgc2V0IGFsbCBvZiB0aGVzZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnN0YW50IGFjcm9zcyBFRkFzIG9mIGRpZmZlcmVudCBzYW1wbGVzIHNvIGFzIHRvIG1heGltaXplIGNvbXBhcmFiaWxpdHkgYWNyb3NzIHN0dWRpZXM6CgpgYGB7cn0KIyB3aGF0IGNvcnJlbGF0aW9uIHRvIHVzZQpjaG9zZW5fY29yIDwtICJjb3IiICMgUkVQT1JURUQKIyBjaG9zZW5fY29yIDwtICJwb2x5IiAjIGFsdGVybmF0aXZlIG9wdGlvbgoKIyB3aGF0IHJvdGF0aW9uIHRvIHVzZQpjaG9zZW5fcm90IDwtICJ2YXJpbWF4IiAjIFJFUE9SVEVECiMgY2hvc2VuX3JvdCA8LSAib2JsaW1pbiIgIyBhbHRlcm5hdGl2ZSBvcHRpb24KCiMgd2hhdCBmYWN0b3JpbmcgbWV0aG9kIHRvIHVzZQpjaG9zZW5fZm0gPC0gIm1pbnJlcyIgIyBSRVBPUlRFRCAobWluaW11bSByZXNpZHVhbHMpCiMgY2hvc2VuX2ZtIDwtICJvbHMiICMgb3JkaW5hcnkgbGVhc3Qgc3F1YXJlcyB1c2luZyBlbXBpcmljYWwgZmlyc3QgZGVyaXZhdGl2ZQojIGNob3Nlbl9mbSA8LSAid2xzIiAjIHdlaWdodGVkIGxlYXN0IHNxdWFyZXMKIyBjaG9zZW5fZm0gPC0gImdscyIgIyBnZW5lcmFsaXplZCB3ZWlnaHRlZCBsZWFzdCBzcXVhcmVzCiMgY2hvc2VuX2ZtIDwtICJwYSIgIyBwcmluY2lwYWwgZmFjdG9ycwojIGNob3Nlbl9mbSA8LSAibWwiICMgbWF4aW11bSBsaWtlbGlob29kCiMgY2hvc2VuX2ZtIDwtICJtaW5jaGkiICMgbWluaW1pemUgc3Mtd2VpZ2h0ZWQgY2hpc3EKIyBjaG9zZW5fZm0gPC0gIm1pbnJhbmsiICMgbWluaW11bSByYW5rCiMgY2hvc2VuX2ZtIDwtICJvbGQubWluIiAjIG1pbnJlcyA8IEFwcmlsIDIwMTcKIyBjaG9zZW5fZm0gPC0gImFscGhhIiAjIGFscGhhIGZhIChLYWlzZXIgJiBDb2ZmZXksIDE5NjUpCgojIHdoYXQgc2NvcmluZyBtZXRob2QgdG8gdXNlCmNob3Nlbl9zY29yZXMgPC0gInRlbkJlcmdlIiAjIFJFUE9SVEVECiMgY2hvc2VuX3Njb3JlcyA8LSAicmVncmVzc2lvbiIgIyBhbHRlcm5hdGl2ZSBvcHRpb24KYGBgCgpgYGB7cn0KIyBvdmVydmlldyBvZiBtaXNzaW5nIGRhdGEKbl9taXNzaW5nIDwtIE5VTEwKZm9yKGkgaW4gbGlzdChkMWFfYWRfd2lkZSwgZDFiX2FkX3dpZGUsIGQxY19hZF93aWRlLCBkMWRfYWRfd2lkZSwKICAgICAgICAgICAgICBkMl9hZF93aWRlLCBkMl83OV93aWRlLCBkM19hZF93aWRlLCBkM183OV93aWRlLCBkM180Nl93aWRlLAogICAgICAgICAgICAgIGQ0X2FkX3dpZGUsIGQ0XzQ2X3dpZGUpKXsKICBuX21pc3NpbmcgPC0gYyhuX21pc3NpbmcsIG1pc3NpbmdfcGVyY2VudF9mdW4oaSkpCn0KYGBgCgotIF9NaXNzaW5nIGRhdGFfOiBGb3IgYWxsIEVGQXMsIEkgaW1wdXRlIG1pc3NpbmcgdHJpYWwtbGV2ZWwgZGF0YSAoZS5nLiwgc2tpcHBlZCB0cmlhbHMgYW1vbmcgY2hpbGQgcGFydGljcGlhbnRzKSB1c2luZyB0aGUgbWVkaWFuIHJlc3BvbnNlIGZvciB0aGF0IG1lbnRhbCBjYXBhY2l0eSBhbW9uZyBvdGhlciBwYXJ0aWNpcGFudHMgd2hvIGV2YWx1YXRlZCB0aGUgc2FtZSB0YXJnZXQgY2hhcmFjdGVyLiBGb3IgZXhhbXBsZSwgaWYgYW4gOC15ZWFyLW9sZCBwYXJ0aWNpcGFudCBpbiB0aGUgImJlZXRsZSIgY29uZGl0aW9uIGZhaWxlZCB0byBwcm92aWRlIGEgcmVzcG9uc2UgdG8gYSBxdWVzdGlvbiBhYm91dCBhIGJlZXRsZSdzIGNhcGFjaXR5IGZvciBoYXBwaW5lc3MsIEkgc2V0IHRoaXMgcmVzcG9uc2UgdG8gYmUgdGhlIG1lZGlhbiByZXNwb25zZSB0byB0aGUgaGFwcGluZXNzIHF1ZXN0aW9uIGFtb25nIG9mIGFsbCBvdGhlciBjaGlsZHJlbiBmcm9tIHRoZSA3LSB0byA5LXllYXItb2xkIGFnZSBncm91cCBmb3IgdGhhdCBzdHVkeSB3aG8gZXZhbHVhdGVkIHRoZSBiZWV0bGUgKGlnbm9yaW5nIGNoaWxkcmVuIHdobyBldmFsdWF0ZWQgc29tZSBvdGhlciB0YXJnZXQgY2hhcmFjdGVyKS4gQWNyb3NzIGFsbCBzdHVkaWVzLCBmZXdlciB0aGFuIGByIGNlaWxpbmdfZGVjKG1heChuX21pc3NpbmcpLCAyKSAgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAlIG9mIHRyaWFscyBpbiBhbnkgYWdlIGdyb3VwIHdlcmUgbWlzc2luZyBkYXRhLiBJbiBteSBqdWRnbWVudCwgdGhlIGFkdmFudGFnZXMgb2YgcmV0YWluaW5nIHRoZSBtb3N0IHBhcnRpY2lwYW50cyBwZXIgc2FtcGxlIChwYXJ0aWN1bGFybHkgZm9yIEVGQSwgd2hpY2ggaXMgaGlnaGx5IHNlbnNpdGl2ZSB0byBzYW1wbGUgc2l6ZSkganVzdGlmaWVzIGltcHV0aW5nIHZhbHVlcyBmb3IgdGhpcyBzbWFsbCBudW1iZXIgb2YgbWlzc2luZyBkYXRhcG9pbnRzLiAKLSBfQ29ycmVsYXRpb25zXzogSSBjb25kdWN0IGFuYWx5c2VzIG92ZXIgUGVhcnNvbiBjb3JyZWxhdGlvbnMgYW1vbmcgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucywgdXNpbmcgcGFpcndpc2UgY29tcGxldGUgb2JzZXJ2YXRpb25zLiBJbiBwcmluY2lwbGUsIHBvbHljaG9yaWMgY29ycmVsYXRpb25zIGFyZSBiZXR0ZXIgc3VpdGVkIHRvIGhhbmRsZSByZXNwb25zZXMgb24gdGhlIHRocmVlLXBvaW50IHNjYWxlcyBlbXBsb3llZCBpbiBTdHVkaWVzIDItNDsgaG93ZXZlciwgaW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGRhdGEsIGNvbmR1Y3RpbmcgRUZBcyB3aXRoIHBvbHljaG9yaWMgY29ycmVsYXRpb25zIGluc3RlYWQgb2YgUGVhcnNvbiBjb3JyZWxhdGlvbnMgdGVuZHMgdG8gZ2VuZXJhdGUgZXJyb3JzIGZ1cnRoZXIgZG93biB0aGUgYW5hbHlzaXMgcGlwZWxpbmUgKGUuZy4sIGdlbmVyYXRpbmcgY29ycmVsYXRpb24gbWF0cmljZXMgdGhhdCBhcmUgbm90IHBvc2l0aXZlIGRlZmluaXRlKSBhbmQgYXBwZWFycyB0byBiZSBzb21ld2hhdCB2dWxuZXJhYmxlIHRvIG92ZXItZml0dGluZyAoZS5nLiwgc3VnZ2VzdGluZyByZXRhaW5pbmcgbWFueSBmYWN0b3JzIHRoYXQgZWFjaCBhY2NvdW50ZWQgZm9yIG9ubHkgYSB2ZXJ5IHNtYWxsIGFtb3VudCBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlKS4KLSBfRmFjdG9yaW5nIGFsZ29yaXRobV86IEkgdXNlIG9yZGluYXJ5IGxlYXN0IHNxdWFyZXMgdG8gZmluZCB0aGUgbWluaW11bSByZXNpZHVhbCBzb2x1dGlvbiwgd2hpY2ggaXMgcm9idXN0IHRvIGEgdmFyaWV0eSBvZiB3YXlzIHRoYXQgbWF0cmljZXMgY2FuIGJlICJiYWRseSBiZWhhdmVkIiAoc2VlIFJldmVsbGUsIDIwMTgpLiBXaGlsZSB0aGlzIGRpc3NlcnRhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEgc3lzdGVtYXRpYyBleHBsb3JhdGlvbiBvZiBhbGwgb2YgdGhlIHBvc3NpYmxlIG9wdGlvbnMsIGluIG15IGNhc3VhbCBleHBsb3JhdGlvbnMgb2YgdGhlIHZhcmlvdXMgYWxnb3JpdGhtcyBhdmFpbGFibGUgSSBoYXZlIHlldCB0byBvYnNlcnZlIGFueSBzdWJzdGFudGlhbCBkaWZmZXJlbmNlcyB0byB0aGUgbnVtYmVyIG9mIGZhY3RvcnMgcmV0YWluZWQgb3IgdG8gdGhlIHJlc3VsdGluZyBzb2x1dGlvbnMgdGhhdCB3b3VsZCBjaGFuZ2UgdGhlIGludGVycHJldGF0aW9ucyBvZmZlcmVkIGhlcmUuCi0gX0ZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xfOiBJIGV4YW1pbmUgdGhlIHJlc3VsdHMgb2YgdGhyZWUgZmFjdG9yIHJldGVudGlvbiBwcm90b2NvbHM6ICgxKSBQYXJhbGxlbCBBbmFseXNpcywgd2hpY2ggY29tcGFyZXMgdGhlIG9ic2VydmVkIGNvcnJlbGF0aW9uIHN0cnVjdHVyZSB0byB0aGUgY29ycmVsYXRpb24gc3RydWN0dXJlIGFyaXNpbmcgZnJvbSByYW5kb20gZGF0YXNldHMgb2YgdGhlIHNhbWUgc2l6ZTsgKDIpIE1pbmltaXppbmcgdGhlIEJheWVzaWFuIEluZm9ybWF0aW9uIENyaXRlcmlvbiAoQklDKSwgd2hpY2ggaXMgb25lIG1ldGhvZCBvZiBvcHRpbWl6aW5nIGJvdGggZ29vZG5lc3Mgb2YgZml0IGFuZCBwYXJzaW1vbnk7IGFuZCAoMykgQSBzZXQgb2YgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSB0aGF0IEkgaGF2ZSB1c2VkIHByZXZpb3VzIHdvcmsgd2l0aCBhZHVsdHMgKFdlaXNtYW4gZXQgYWwuLCAyMDE3KSwgaW4gd2hpY2ggSSBiZWdpbiB3aXRoIHRoZSBtYXhpbWFsIG51bWJlciBvZiBmYWN0b3JzIGFjY29yZGluZyB0byBhbiBhbmFseXNpcyBvZiBkZWdyZWVzIG9mIGZyZWVkb20gYW5kIHJldGFpbiBmYWN0b3JzIHRoYXQgbWVldCBhbGwgdGhyZWUgb2YgdGhlIGZvbGxvd2luZyBjcml0ZXJpYTogKGEpIGhhdmUgZWlnZW52YWx1ZXMgZ3JlYXRlciB0aGFuIDEuMDAsIChiKSBpbmRpdmlkdWFsbHkgYWNjb3VudCBmb3IgZ3JlYXRlciB0aGFuIDUlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgYmVmb3JlIHJvdGF0aW9uLCBhbmQgKGMpIGFyZSB0aGUgImRvbWluYW50IiBmYWN0b3IgKHRoZSBmYWN0b3Igd2l0aCB0aGUgc3Ryb25nZXN0IGFic29sdXRlIGZhY3RvciBsb2FkaW5nKSBmb3IgYXQgbGVhc3QgMSBtZW50YWwgY2FwYWNpdHkgYWZ0ZXIgcm90YXRpb24uIEZvciBlYWNoIHN0dWR5LCBteSBpbnRlcnByZXRhdGlvbiBvZiBob3cgYmVzdCB0byBjaGFyYWN0ZXJpemUgdGhlIGRhdGFzZXQgKGkuZS4sIGhvdyBtYW55IGZhY3RvcnMgSSBvYnNlcnZlZCkgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZGVncmVlIG9mIGNvbnNlbnN1cyBhbW9uZyB0aGVzZSB0aHJlZSBwcm90b2NvbHMgYW5kIHRoZSBpbnRlcnByZXRhYmlsaXR5IG9mIHRoZSByZXRhaW5lZCBmYWN0b3JzIHVuZGVyIGVhY2ggcHJvdG9jb2wuIChTZWUgVGFibGUgMy4xIGZvciB0aGUgcmVzdWx0cyBvZiBhbGwgZmFjdG9yIHJldGVudGlvbiBwcm90b2NvbHMgZm9yIGFsbCBzdHVkaWVzIGFuZCBzYW1wbGVzLikKLSBfUm90YXRpb25fOiBUbyBtYXhpbWluZSBpbnRlcnByZXRhYmlsaXR5IGZhY3RvcnMsIEkgcHJlc2VudCB2YXJpbWF4LXJvdGF0ZWQgc29sdXRpb25zLCB3aGljaCBjb25zdHJhaW4gYWxsIGZhY3RvcnMgdG8gYmUgb3J0aG9nb25hbC4gKEZvciBzb2x1dGlvbnMgdXNpbmcgb2JsaXF1ZSBbIm9ibGltaW4iXSByb3RhdGlvbnMsIHdoaWNoIGFsbG93IGZvciBjb3JyZWxhdGVkIGZhY3RvcnMsIFtYWCBTRUUgQVBQRU5ESVg/XS4pCi0gX0ZhY3RvciBzY29yZXNfOiBJIHVzZSB0aGUgbWV0aG9kIGRldmVsb3BlZCBieSB0ZW4gQmVyZ2UsIEtyaWpuZW4sIFdhbnNiZWVrLCAmIFNoYXBpcm8gKDE5OTkpIHRvIGNhbGN1bGF0ZSBmYWN0b3Igc2NvcmVzLCBhcyBzdWdnZXN0ZWQgYnkgUmV2ZWxsZSAoMjAxOCkuIChJIGluY2x1ZGUgdGhpcyBwYXJhbWV0ZXIgaGVyZSBmb3IgY29tcGxldGVuZXNzOyB0aGlzIGNoYXB0ZXIgZG9lcyBub3QgaW5jbHVkZSBhbnkgYW5hbHlzZXMgb2YgZmFjdG9yIHNjb3Jlcy4pCgpUbyBjb25kdWN0IHRoZXNlIEVGQXMsIEkgdXNlIHRoZSAicHN5Y2giIHBhY2thZ2UgZm9yIFIgKFJldmVsbGUsIDIwMTgpLgoKCiMgU3R1ZHkgMTogQW4gYWR1bHQgZW5kcG9pbnQKCkFuIGluLWRlcHRoIGFuYWx5c2lzIGFuZCBkaXNjdXNzaW9uIG9mIHRoZSBjb25jZXB0dWFsIHVuaXRzIGF2YWlsYWJsZSB0byBVUyBhZHVsdHMgaW4gU3R1ZGllcyAxYS0xZCBpcyBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgdGhlc2Ugc3R1ZGllcyAoV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBIZXJlIEkgcHJlc2VudCB0aGVzZSBhbmFseXNlcyBhbmV3LCB3aXRoIHNsaWdodCB0d2Vha3MgdG8gdGhlIGFuYWx5c2lzIHBpcGVsaW5lIHRvIG1heGltaXplIGNvbXBhcmFiaWxpdHkgdG8gU3R1ZGllcyAyLTQuIFRoZXNlIHJlc3VsdHMgc2VydmUgYXMgdGhlIGJhY2tkcm9wIGZvciB0aGUgZXh0ZW5kZWQgYW5heXNpcyBvZiBjb25jZXB0dWFsIGRldmVsb3BtZW50IGluIHRoaXMgZG9tYWluIHRoYXQgaXMgdGhlIGZvY3VzIG9mIHRoaXMgZGlzc2VydGF0aW9uLgoKX19OT1RFIFRPIFNFTEY6IENIRUNLIFNBTVBMRSBTSVpFUyBBR0FJTlNUIFBOQVMgUEFQRVIuIEVYQ0xVU0lPTiBDUklURVJJQT8/X18KCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKQXMgbm90ZWQgaW4gQ2hhcHRlciBJSSwgaW4gdGhlIG9yaWdpbmFsIGFuYWx5c2lzIG9mIHRoZXNlIGRhdGFzZXRzIHJlc3BvbnNlcyB3ZXJlIHJlY29kZWQgdG8gcnVuIGZyb20gLTMgdG8gKzMgYmVmb3JlIGFuYWx5c2VzIChXZWlzbWFuIGV0IGFsLiwgMjAxNyk7IGluIHRoaXMgZGlzc2VydGF0aW9uLCBJIG1haW50YWluIHRoZSAwLTYgY29kaW5nIGZvciBjb21wYXJhYmlsaXR5IHRvIFN0dWRpZXMgMi00LgoKSW4gU3R1ZHkgMWMsIHBhcnRpY2lwYW50cyBhc3Nlc3NlZCB0d28gdGFyZ2V0IGNoYXJhY2F0ZXJzIHNpZGUgYnkgc2lkZSAoaW4gY29udHJhc3QgdG8gU3R1ZGllcyAxYSwgMWIsIGFuZCAxZCwgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBqdXN0IG9uZSB0YXJnZXQgY2hhcmFjdGVyKS4gSW4gdGhlIGN1cnJlbnQgYW5hbHlzZXMsIEkgdHJlYXQgZWFjaCBwYXJ0aWNpcGFudCdzIGFzc2Vzc21lbnRzIG9mIGVhY2ggdGFyZ2V0IGNoYXJhY3RlciBhcyBhIHNlcGFyYXRlIHNldCBvZiBvYnNlcnZhdGlvbnMgKGFzIGlmIHRoZXkgY2FtZSBmcm9tIGRpZmZlcmVudCBwYXJ0aWNpcGFudHMpLCBpbiBlZmZlY3QgZG91YmxpbmcgdGhlIHNhbXBsZSBzaXplIGZvciB0aGVzZSBzdHVkaWVzIChidXQgaWdub3JpbmcgdGhlIHdpdGhpbi1zdWJqZWN0IGRlc2lnbikuIChbWFggU0VFIEFQUEVORElYP10gZm9yIHNlcGFyYXRlIEVGQXMgb2YgdGhlIHBhcnRpY2lwYW50cycgcmVzcG9uc2VzIHRvIHRoZSBmaXJzdCB0YXJnZXQgY2hhcmFjdGVyIHRoYXQgdGhleSB3ZXJlIGFzc2lnbmVkIHRvIHJhdGUgdnMuIHRoZSBzZWNvbmQgY2hhcmFjdGVyLikKCiMjIFJlc3VsdHMKCmBgYHtyfQpyZXRlbl9yZXBvcnQgPC0gbGlzdCgiU3R1ZHkgMWEiID0gZDFhX2FkX3dpZGVfaSwgCiAgICAgICAgICAgICAgICAgICAgICJTdHVkeSAxYiIgPSBkMWJfYWRfd2lkZV9pLAogICAgICAgICAgICAgICAgICAgICAiU3R1ZHkgMWMiID0gZDFjX2FkX3dpZGVfaSwgCiAgICAgICAgICAgICAgICAgICAgICJTdHVkeSAxZCIgPSBkMWRfYWRfd2lkZV9pLAogICAgICAgICAgICAgICAgICAgICAiU3R1ZHkgMjogQWR1bHRzIiA9IGQyX2FkX3dpZGVfaSwKICAgICAgICAgICAgICAgICAgICAgIlN0dWR5IDI6IENoaWxkcmVuICg3LTl5KSIgPSBkMl83OV93aWRlX2ksCiAgICAgICAgICAgICAgICAgICAgICJTdHVkeSAzOiBBZHVsdHMiID0gZDNfYWRfd2lkZV9pLAogICAgICAgICAgICAgICAgICAgICAiU3R1ZHkgMzogT2xkZXIgY2hpbGRyZW4gKDctOXkpIiA9IGQzXzc5X3dpZGVfaSwKICAgICAgICAgICAgICAgICAgICAgIlN0dWR5IDM6IFlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpIiA9IGQzXzQ2X3dpZGVfaSwKICAgICAgICAgICAgICAgICAgICAgIlN0dWR5IDQ6IEFkdWx0cyIgPSBkNF9hZF93aWRlX2ksCiAgICAgICAgICAgICAgICAgICAgICJTdHVkeSA0OiBDaGlsZHJlbiAoNC01eSkiID0gZDRfNDZfd2lkZV9pKSAlPiUgCiAgcmV0ZW5fcmVwb3J0X2Z1bigpCmBgYAoKYGBge3J9CnJldGVuX3JlcG9ydF9ieXByb3RvY29sIDwtIHJldGVuX3JlcG9ydCAlPiUgCiAgZ2F0aGVyKHByb3RvY29sLCBuZmFjdCkgJT4lIAogIGdyb3VwX2J5KHByb3RvY29sKSAlPiUgCiAgc3VtbWFyaXNlKG1pbiA9IG1pbihuZmFjdCksIAogICAgICAgICAgICBtYXggPSBtYXgobmZhY3QpLCAKICAgICAgICAgICAgbWVhbiA9IG1lYW4obmZhY3QpLCAKICAgICAgICAgICAgbWVkaWFuID0gbWVkaWFuKG5mYWN0KSkgJT4lCiAgdW5ncm91cCgpCgpyZXRlbl9yZXBvcnRfYnlwcm90b2NvbApgYGAKCmBgYHtyfQpyZXRlbl9yZXBvcnRfYnlzdHVkeSA8LSByZXRlbl9yZXBvcnQgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbigic3R1ZHkiKSAlPiUKICBnYXRoZXIocHJvdG9jb2wsIG5mYWN0LCAtc3R1ZHkpICU+JSAKICBncm91cF9ieShzdHVkeSkgJT4lIAogIHN1bW1hcmlzZShtaW4gPSBtaW4obmZhY3QpLCAKICAgICAgICAgICAgbWF4ID0gbWF4KG5mYWN0KSwgCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKG5mYWN0KSwgCiAgICAgICAgICAgIG1lZGlhbiA9IG1lZGlhbihuZmFjdCkpICU+JQogIHVuZ3JvdXAoKQoKcmV0ZW5fcmVwb3J0X2J5c3R1ZHkKYGBgCgojIyMgU3R1ZHkgMWEKCkluIFN0dWR5IDFhLCBgciBucm93KGQxYV9hZF93aWRlKWAgVVMgYWR1bHRzIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciBvbiA0MCBtZW50YWwgY2FwYWNpdGllcy4gVGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgd2l0aCBwYXJ0aWNpcGFudHMgcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIGVpdGhlciBhIGJlZXRsZSBvciBhIHJvYm90LiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyMjIEhvdyBtYW55IGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYSIsXQpgYGAKCmBgYHtyfQplZmFfcGFyX2QxYV9hZCA8LSBmYV9mdW4oZDFhX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYSIsICJwYXIiXSkKZWZhX2JpY19kMWFfYWQgPC0gZmFfZnVuKGQxYV9hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMWEiLCAiYmljIl0pCmVmYV93ZG1fZDFhX2FkIDwtIGZhX2Z1bihkMWFfYWRfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDFhIiwgIndkbSJdKQpgYGAKCmBgYHtyfQplZmFfYmljX2QxYV9hZCRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX2JpY19kMWFfYWQpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX2JpY19kMWFfYWQpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKVHdvIG9mIHRoZSB0aHJlZSBwcm90b2NvbHMgZm9yIGRldGVybWluaW5nIGhvdyBtYW55IGZhY3RvcnMgdG8gcmV0YWluIChwYXJhbGxlbCBhbmFseXNpcyBhbmQgdGhlIGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEgcmVwb3J0ZWQgaW4gdGhlIG9yaWdpbmFsIHB1YmxpY2F0aW9uIG9mIFN0dWRpZXMgMWEtMWQ7IFdlaXNtYW4gZXQgYWwuLCAyMDE3KSBzdWdnZXN0ZWQgcmV0YWluaW5nIHRocmVlIGZhY3RvcnMsIHdoaWxlIHRoZSB0aGlyZCAobWluaW1pemluZyBCSUMpIHN1Z2dlc3RlZCByZXRhaW5pbmcgZml2ZSBmYWN0b3JzOyBzZWUgVGFibGUgMy4xLiBIb3dldmVyLCB0aHJlZSBvZiB0aGUgZml2ZSBmYWN0b3JzIHN1Z2dlc3RlZCBieSBtaW5pbWl6aW5nIEJJQyB3ZXJlIHF1YWxpdGF0aXZlbHkgdmVyeSBzaW1pbGFyIHRvIHRoZSB0aHJlZSBmYWN0b3JzIHJlcG9ydGVkIGJlbG93LCBhbmQgdG9nZXRoZXIgYWNjb3VudGVkIGZvciBgciBlZmFfYmljX2QxYV9hZCRWYWNjb3VudGVkWyJDdW11bGF0aXZlIFByb3BvcnRpb24iLCAiRjMiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLiBUaGUgZm91cnRoIGFuZCBmaWZ0aCBmYWN0b3JzIGVhY2ggYWNjb3VudGVkIGZvciAkPCQgYHIgZWZhX2JpY19kMWFfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCBjKCJGNCIsICJGNSIpXSAlPiUgbWF4KCkgJT4lIGNlaWxpbmdfZGVjKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSwgYW5kIG5laXRoZXIgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGFueSBvZiB0aGUgNDAgbWVudGFsIGNhcGFjaXRpZXMgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeS4gSW5kZWVkLCBmYWN0b3IgbG9hZGluZ3MgZm9yIHRoZXNlIHR3byBmYWN0b3JzIHdlcmUgYWxsIHF1aXRlIHNtYWxsIChhYnNvbHV0ZSBsb2FkaW5ncyBhbGwgJDwkIGByIGRhdGEuZnJhbWUobG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QxYV9hZCkgJT4lIGZpbHRlcihmYWN0b3IgJWluJSBjKCJGNCIsICJGNSIpKSkkbWF4X2FicyAlPiUgbWF4KCkgJT4lIGNlaWxpbmdfZGVjKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgKS4gR2l2ZW4gYWxsIHRoaXMsIEkgd2lsbCBmb2N1cyB0aGUgcmVtYWluZGVyIG9mIG15IGFuYWx5c2VzIG9uIHRoZSAzLWZhY3RvciBzb2x1dGlvbiAoYnV0IHNlZSBbWFggQVBQRU5ESVg/XSBmb3IgdGhlIDUtZmFjdG9yIHNvbHV0aW9uKS4KCmBgYHtyfQp0YWJsZTMuMSA8LSByZXRlbl9yZXBvcnQgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdHVkeSIpICU+JQogIGZ1bGxfam9pbihyZXRlbl9yZXBvcnRfYnlzdHVkeSkgJT4lCiAgIyBjb2x1bW5fdG9fcm93bmFtZXMoInN0dWR5IikgJT4lCiAgbXV0YXRlKG1lYW4gPSByb3VuZChtZWFuLCAyKSwKICAgICAgICAgc3R1ZHkgPSBnc3ViKCJTdHVkeSAiLCAiIiwgc3R1ZHkpLAogICAgICAgICBzdHVkeSA9IGdzdWIoIi5cXDogIiwgIiIsIHN0dWR5KSkgJT4lCiAgcmVuYW1lKGAgYCA9IHN0dWR5LCAKICAgICAgICAgYHBhcmFsbGVsIGFuYWx5c2lzYCA9IHBhciwKICAgICAgICAgYG1pbmltaXppbmcgQklDYCA9IGJpYywKICAgICAgICAgYFdlaXNtYW4gZXQgYWwuICgyMDE3KWAgPSB3ZG0sCiAgICAgICAgIGBtaW4uYCA9IG1pbiwKICAgICAgICAgYG1heC5gID0gbWF4KSAlPiUKICBrYWJsZShmb3JtYXQgPSAiaHRtbCIsICNhbGlnbiA9IGMoImwiLCByZXAoInIiLCAzKSksCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSAzLjE6IE51bWJlciBvZiBmYWN0b3JzIHN1Z2dlc3RlZCBieSB0aHJlZSBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29sczogUGFyYWxsZWwgQW5hbHlzaXMsIE1pbmltaXppbmcgQklDLCBhbmQgdGhlIHByZXNldCBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIHNwZWNpZmllZCBpbiBXZWlzbWFuIGV0IGFsLiAoMjAxNykuIFJlc3VsdHMgYXJlIGdyb3VwZWQgYnkgc3R1ZHkgYW5kIGFnZSBncm91cC4iKSAlPiUgIAogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSAxOiBBbiBhZHVsdCBlbmRwb2ludCIsIDEsIDQpICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDI6IENvbmNlcHR1YWwgY2hhbmdlIGJldHdlZW4gbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkgYW5kIGFkdWx0aG9vZCIsIDUsIDYpICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDM6IENvbmNlcHR1YWwgY2hhbmdlIG92ZXIgZWFybHkgYW5kIG1pZGRsZSBjaGlsZGhvb2QgKDQtOXkpIiwgNywgOSkgJT4lCiAgZ3JvdXBfcm93cygiU3R1ZHkgNDogQSBmb2N1cyBvbiBlYXJseSBjaGlsZGhvb2QgKDQtNXkpIiwgMTAsIDExKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwgIlByb3RvY29sIGFsdGVybmF0aXZlcyIgPSAzLCAKICAgICAgICAgICAgICAgICAgICAgIlN1bW1hcnkgb2Ygc3VnZ2VzdGlvbnMiID0gNCkpICU+JQogIGNvbHVtbl9zcGVjKDQsIGJvcmRlcl9yaWdodCA9IFQpCmBgYAoKYGBge3IgdGFibGUzLjEsIGluY2x1ZGUgPSBUfQp0YWJsZTMuMQpgYGAKCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWFfYWQgPC0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikKYGBgCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyByZWxhdGVkIHRvIGJpb2xvZ2ljYWwgbmVlZHPigJRhIHN1aXRlIG9mIGNhcGFjaXRpZXMgdGhhdCBJIHdpbGwgcmVmZXIgdG8gYXMgQk9EWSAoYSBsYWJlbCBlbXBsb3llZCBpbiB0aGUgb3JpZ2luYWwgcmVwb3J0aW5nIG9mIHRoaXMgc3R1ZHk7IFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDFhX2FkLCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QxYV9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLgoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBjYXBhY2l0aWVzIGZvciBzZWxmLSBhbmQgb3RoZXItcmVsZXZhbnQgZW1vdGlvbnPigJRhIHN1aXRlIG9mIGNhcGFjaXRpZXMgdGhhdCBJIHdpbGwgcmVmZXIgdG8gYXMgSEVBUlQgKGFzIGluIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDFhX2FkLCA0LCAiRjIiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QxYV9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAKClRoZSB0aGlyZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgdG8gZGV0ZWN0IGFuZCB1c2UgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudmlyb25tZW504oCUYSBzdWl0ZSBvZiBjYXBhY2l0aWVzIHRoYXQgSSB3aWxsIHJlZmVyIHRvIGFzIE1JTkQgKGFzIGluIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDFhX2FkLCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QxYV9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAgCgpTZWUgRmlndXJlIDMuMSBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4KCiMjIyBTdHVkeSAxYgoKU3R1ZHkgMWIgd2FzIGEgZGlyZWN0IHJlcGxpY2F0aW9uIG9mIFN0dWR5IDFhOiBgciBucm93KGQxYl9hZF93aWRlKWAgVVMgYWR1bHRzIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciAoZWl0aGVyIGEgYmVldGxlIG9yIGEgcm9ib3QpIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyMjIEhvdyBtYW55IGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYiIsXQpgYGAKCmBgYHtyfQplZmFfcGFyX2QxYl9hZCA8LSBmYV9mdW4oZDFiX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYiIsICJwYXIiXSkKZWZhX2JpY19kMWJfYWQgPC0gZmFfZnVuKGQxYl9hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMWIiLCAiYmljIl0pCmVmYV93ZG1fZDFiX2FkIDwtIGZhX2Z1bihkMWJfYWRfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDFiIiwgIndkbSJdKQpgYGAKCmBgYHtyfQplZmFfd2RtX2QxYl9hZCRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX3dkbV9kMWJfYWQpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX3dkbV9kMWJfYWQpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKYGBge3J9CmVmYV9wYXJfZDFiX2FkJFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfcGFyX2QxYl9hZCkKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfcGFyX2QxYl9hZCkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpgYGB7cn0KZWZhX2JpY19kMWJfYWQkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV9iaWNfZDFiX2FkKQpsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV9iaWNfZDFiX2FkKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWZhY3RvciksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCkVhY2ggb2YgdGhlIHRocmVlIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzIHN1Z2dlc3RlZCBhIGRpZmZlcmVudCBudW1iZXIgb2YgZmFjdG9ycyB0byByZXRhaW47IHNlZSBUYWJsZSAzLjEuCgpUaGUgcmV0ZW50aW9uIGNyaXRlcmlhIHVzZWQgaW4gdGhlIG9yaWdpbmFsIHJlcG9ydGluZyBvZiB0aGlzIHN0dWR5IChXZWlzbWFuIGV0IGFsLiwgMjAxNykgc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzLiAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RlZCByZXRhaW5pbmcgZm91ciBmYWN0b3JzLiBIb3dldmVyLCB0aHJlZSBvZiB0aGUgZml2ZSBmYWN0b3JzIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcyB3ZXJlIHF1YWxpdGF0aXZlbHkgdmVyeSBzaW1pbGFyIHRvIHRoZSB0aHJlZSBmYWN0b3JzIHJlcG9ydGVkIGJlbG93LCBhbmQgdG9nZXRoZXIgYWNjb3VudGVkIGZvciBgciBlZmFfcGFyX2QxYl9hZCRWYWNjb3VudGVkWyJDdW11bGF0aXZlIFByb3BvcnRpb24iLCAiRjMiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLiBUaGUgZm91cnRoIGZhY3RvciBhY2NvdW50ZWQgZm9yIG9ubHkgYHIgZWZhX3Bhcl9kMWJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjQiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLCBhbmQgd2FzIG5vdCB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhbnkgb2YgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHksIHdpdGggc21hbGwgbG9hZGluZ3MgZm9yIGFsbCBjYXBhY2l0aWVzIChhYnNvbHV0ZSBsb2FkaW5ncyBhbGwgJDwkIGByIGRhdGEuZnJhbWUobG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfcGFyX2QxYl9hZCkgJT4lIGZpbHRlcihmYWN0b3IgPT0gIkY0IikpJG1heF9hYnMgJT4lIG1heCgpICU+JSBjZWlsaW5nX2RlYygyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCkuIAoKTGlrZXdpc2UsIG1pbmltaXppbmcgQklDIGFuYWx5c2lzIHN1Z2dlc3RlZCByZXRhaW5pbmcgZml2ZSBmYWN0b3JzLCBidXQgdGhyZWUgb2YgdGhlIGZpdmUgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgbWluaW1pemluZyBCSUMgd2VyZSBxdWFsaXRhdGl2ZWx5IHZlcnkgc2ltaWxhciB0byB0aGUgdGhyZWUgZmFjdG9ycyByZXBvcnRlZCBiZWxvdywgYW5kIHRvZ2V0aGVyIGFjY291bnRlZCBmb3IgYHIgZWZhX2JpY19kMWJfYWQkVmFjY291bnRlZFsiQ3VtdWxhdGl2ZSBQcm9wb3J0aW9uIiwgIkYzIl0gJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZS4gVGhlIGZvdXJ0aCBhbmQgZmlmdGggZmFjdG9ycyBlYWNoIGFjY291bnRlZCBmb3IgJDwkIGByIGVmYV9iaWNfZDFiX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgYygiRjQiLCAiRjUiKV0gJT4lIG1heCgpICU+JSBjZWlsaW5nX2RlYygyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UsIGFuZCBuZWl0aGVyIHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhbnkgb2YgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHkuIEluZGVlZCwgZmFjdG9yIGxvYWRpbmdzIGZvciB0aGVzZSB0d28gZmFjdG9ycyB3ZXJlIGFsbCBxdWl0ZSBzbWFsbCAoYWJzb2x1dGUgbG9hZGluZ3MgYWxsICQ8JCBgciBkYXRhLmZyYW1lKGxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX2JpY19kMWJfYWQpICU+JSBmaWx0ZXIoZmFjdG9yICVpbiUgYygiRjQiLCAiRjUiKSkpJG1heF9hYnMgJT4lIG1heCgpICU+JSBjZWlsaW5nX2RlYygyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCkuIAoKR2l2ZW4gYWxsIHRoaXMsIEkgd2lsbCBhZ2FpbiBmb2N1cyB0aGUgcmVtYWluZGVyIG9mIG15IGFuYWx5c2VzIG9uIHRoZSAzLWZhY3RvciBzb2x1dGlvbiAoYnV0IHNlZSBbWFggQVBQRU5ESVg/XSBmb3IgdGhlIDQtIGFuZCA1LWZhY3RvciBzb2x1dGlvbnMpLgoKIyMjIyBXaGF0IGFyZSB0aGVzZSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYl9hZCA8LSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKQpgYGAKCkFmdGVyIHJvdGF0aW9uLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyB0aGF0IEkgbGFiZWxlZCBCT0RZIGluIFN0dWR5IDFhIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxYl9hZCwgNCwgIkYxIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYXQgSSBsYWJlbGVkIEhFQVJUIGluIFN0dWR5IDFhIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxYl9hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyB0aGF0IEkgcmVmZXJyZWQgdG8gYXMgTUlORCBpbiBTdHVkeSAxYSAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMWJfYWQsIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDFiX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uICAKClNlZSBGaWd1cmUgMy4xIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLgoKIyMjIFN0dWR5IDFjCgpJbiBTdHVkeSAxYywgYHIgbnJvdyhkMWNfYWRfd2lkZSkvMmAgVVMgYWR1bHRzIGVhY2ggYXNzZXNzZWQgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiBMaWtlIFN0dWRpZXMgMWEgYW5kIDFiLCB0aGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoOyBidXQgaW4gdGhpcyBzdHVkeSwgYWxsIHBhcnRpY2lwYW50cyBhc3Nlc3NlZCBib3RoIG9mIHRoZXNlIHRhcmdldCBjaGFyYWN0ZXJzIHNpZGUgYnkgc2lkZSAod2l0aCBsZWZ0LXJpZ2h0IHBvc2l0aW9uIGNvdW50ZXJiYWxhbmVkIGFjcm9zcyBwYXJ0aWNpcGFudHMpLiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyMjIEhvdyBtYW55IGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYyIsXQpgYGAKCmBgYHtyfQplZmFfcGFyX2QxY19hZCA8LSBmYV9mdW4oZDFjX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYyIsICJwYXIiXSkKZWZhX2JpY19kMWNfYWQgPC0gZmFfZnVuKGQxY19hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMWMiLCAiYmljIl0pCmVmYV93ZG1fZDFjX2FkIDwtIGZhX2Z1bihkMWNfYWRfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDFjIiwgIndkbSJdKQpgYGAKCmBgYHtyfQplZmFfYmljX2QxY19hZCRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX2JpY19kMWNfYWQpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX2JpY19kMWNfYWQpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKVHdvIG9mIHRoZSB0aHJlZSBwcm90b2NvbHMgZm9yIGRldGVybWluaW5nIGhvdyBtYW55IGZhY3RvcnMgdG8gcmV0YWluIChwYXJhbGxlbCBhbmFseXNpcyBhbmQgdGhlIGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEgcmVwb3J0ZWQgaW4gdGhlIG9yaWdpbmFsIHB1YmxpY2F0aW9uIG9mIFN0dWRpZXMgMWMtMWQ7IFdlaXNtYW4gZXQgYWwuLCAyMDE3KSBzdWdnZXN0ZWQgcmV0YWluaW5nIHRocmVlIGZhY3RvcnMsIHdoaWxlIHRoZSB0aGlyZCAobWluaW1pemluZyBCSUMpIHN1Z2dlc3RlZCByZXRhaW5pbmcgZml2ZSBmYWN0b3JzOyBzZWUgVGFibGUgMy4xLiBIb3dldmVyLCBtdWNoIGFzIGluIFN0dWRpZXMgMWEgYW5kIDFiLCB0aHJlZSBvZiB0aGUgZml2ZSBmYWN0b3JzIHN1Z2dlc3RlZCBieSBtaW5pbWl6aW5nIEJJQyB3ZXJlIHF1YWxpdGF0aXZlbHkgdmVyeSBzaW1pbGFyIHRvIHRoZSB0aHJlZSBmYWN0b3JzIHJlcG9ydGVkIGJlbG93LCBhbmQgdG9nZXRoZXIgYWNjb3VudGVkIGZvciBgciBlZmFfYmljX2QxY19hZCRWYWNjb3VudGVkWyJDdW11bGF0aXZlIFByb3BvcnRpb24iLCAiRjMiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLiBUaGUgZm91cnRoIGZhY3RvciBhY2NvdW50ZWQgZm9yIG9ubHkgYHIgZWZhX2JpY19kMWNfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjQiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLCB3YXMgbm90IHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGFueSBvZiB0aGUgNDAgbWVudGFsIGNhcGFjaXRpZXMgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeSwgd2l0aCBzbWFsbCBmYWN0b3IgbG9hZGluZ3MgZm9yIGFsbCBjYXBhY2l0aWVzIChhYnNvbHV0ZSBsb2FkaW5ncyBhbGwgJDwkIGByIGRhdGEuZnJhbWUobG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QxY19hZCkgJT4lIGZpbHRlcihmYWN0b3IgPT0gIkY0IikpJG1heF9hYnMgJT4lIG1heCgpICU+JSBjZWlsaW5nX2RlYygyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCkuIEdpdmVuIGFsbCB0aGlzLCBJIHdpbGwgYWdhaW4gZm9jdXMgdGhlIHJlbWFpbmRlciBvZiBteSBhbmFseXNlcyBvbiB0aGUgMy1mYWN0b3Igc29sdXRpb24gKGJ1dCBzZWUgW1hYIEFQUEVORElYP10gZm9yIHRoZSA0LWZhY3RvciBzb2x1dGlvbikuCgojIyMjIFdoYXQgYXJlIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFjX2FkIDwtIGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpCmBgYAoKQWZ0ZXIgcm90YXRpb24sIHRoZSBmaXJzdCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIHRoYXQgSSBsYWJlbGVkIEJPRFkgaW4gU3R1ZGllcyAxYSBhbmQgMWIgKHNlZSBhbHNvIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDFjX2FkLCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QxY19hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLgoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgdGhhdCBJIGxhYmVsZWQgSEVBUlQgaW4gU3R1ZGllcyAxYSBhbmQgMWIgKHNlZSBhbHNvIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDFjX2FkLCA0LCAiRjIiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QxY19hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAKClRoZSB0aGlyZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIHRoYXQgSSByZWZlcnJlZCB0byBhcyBNSU5EIGluIFN0dWRpZXMgMWEgYW5kIDFiIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxY19hZCwgNCwgIkYzIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWNfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gIAoKU2VlIEZpZ3VyZSAzLjEgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuCgojIyMgU3R1ZHkgMWQKCkluIFN0dWR5IDFkLCBgciBucm93KGQxZF9hZF93aWRlKWAgVVMgYWR1bHRzIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciBvbiA0MCBtZW50YWwgY2FwYWNpdGllcy4gVW5saWtlIFN0dWRpZXMgMWEtMWMsIHRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJtYW55IGNoYXJhY3RlcnMiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIGluIHdoaWNoIHBhcnRpY2lwYW50cyB3ZXJlIHJhbmRvbWx5IGFzc2lnbmVkIHRvIGFzc2VzcyBvbmUgb2YgdGhlIGZvbGxvd2luZyAyMSB0YXJnZXQgY2hhcmFjdGVyczogYW4gYWR1bHQsIGEgY2hpbGQsIGFuIGluZmFudCwgYSBwZXJzb24gaW4gYSBwZXJzaXN0ZW50IHZlZ2V0YXRpdmUgc3RhdGUsIGEgZmV0dXMsIGEgY2hpbXBhbnplZSwgYW4gZWxlcGhhbnQsIGEgZG9scGhpbiwgYSBiZWFyLCBhIGRvZywgYSBnb2F0LCBhIG1vdXNlLCBhIGZyb2csIGEgYmx1ZSBqYXksIGEgZmlzaCwgYSBiZWV0bGUsIGEgbWljcm9iZSwgYSByb2JvdCwgYSBjb21wdXRlciwgYSBjYXIsIG9yIGEgc3RhcGxlci4gKFNlZSBDaGFwdGVyIElJIGFuZCBXZWlzbWFuIGV0IGFsLiwgMjAxNywgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMjIyBIb3cgbWFueSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CnJldGVuX3JlcG9ydFsiU3R1ZHkgMWQiLF0KYGBgCgpgYGB7cn0KZWZhX3Bhcl9kMWRfYWQgPC0gZmFfZnVuKGQxZF9hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMWQiLCAicGFyIl0pCmVmYV9iaWNfZDFkX2FkIDwtIGZhX2Z1bihkMWRfYWRfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDFkIiwgImJpYyJdKQplZmFfd2RtX2QxZF9hZCA8LSBmYV9mdW4oZDFkX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAxZCIsICJ3ZG0iXSkKYGBgCgpgYGB7cn0KZWZhX3dkbV9kMWRfYWQkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV93ZG1fZDFkX2FkKQpsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV93ZG1fZDFkX2FkKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWZhY3RvciksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyfQplZmFfcGFyX2QxZF9hZCRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX3Bhcl9kMWRfYWQpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX3Bhcl9kMWRfYWQpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKYGBge3J9CmVmYV9iaWNfZDFkX2FkJFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfYmljX2QxZF9hZCkKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QxZF9hZCkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpFYWNoIG9mIHRoZSB0aHJlZSBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scyBzdWdnZXN0ZWQgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gcmV0YWluOyBzZWUgVGFibGUgMy4xLgoKVGhlIHJldGVudGlvbiBjcml0ZXJpYSB1c2VkIGluIHRoZSBvcmlnaW5hbCByZXBvcnRpbmcgb2YgdGhpcyBzdHVkeSAoV2Vpc21hbiBldCBhbC4sIDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycy4gCgpQYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0ZWQgcmV0YWluaW5nIGZvdXIgZmFjdG9ycy4gSG93ZXZlciwgdGhyZWUgb2YgdGhlIGZpdmUgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgcGFyYWxsZWwgYW5hbHlzaXMgd2VyZSBxdWFsaXRhdGl2ZWx5IHZlcnkgc2ltaWxhciB0byB0aGUgdGhyZWUgZmFjdG9ycyByZXBvcnRlZCBiZWxvdywgYW5kIHRvZ2V0aGVyIGFjY291bnRlZCBmb3IgYHIgZWZhX3Bhcl9kMWRfYWQkVmFjY291bnRlZFsiQ3VtdWxhdGl2ZSBQcm9wb3J0aW9uIiwgIkYzIl0gJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZS4gVGhlIGZvdXJ0aCBmYWN0b3IgYWNjb3VudGVkIGZvciBvbmx5IGByIGVmYV9wYXJfZDFkX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkY0Il0gJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSwgYW5kIHdhcyBub3QgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYW55IG9mIHRoZSA0MCBtZW50YWwgY2FwYWNpdGllcyBpbmNsdWRlZCBpbiB0aGlzIHN0dWR5LCB3aXRoIHNtYWxsIGxvYWRpbmdzIGZvciBhbGwgY2FwYWNpdGllcyAoYWJzb2x1dGUgbG9hZGluZ3MgYWxsICQ8JCBgciBkYXRhLmZyYW1lKGxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX3Bhcl9kMWRfYWQpICU+JSBmaWx0ZXIoZmFjdG9yID09ICJGNCIpKSRtYXhfYWJzICU+JSBtYXgoKSAlPiUgY2VpbGluZ19kZWMoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWApLiAKCkxpa2V3aXNlLCBtaW5pbWl6aW5nIEJJQyBhbmFseXNpcyBzdWdnZXN0ZWQgcmV0YWluaW5nIGZpdmUgZmFjdG9ycywgYnV0IHRocmVlIG9mIHRoZSBmaXZlIGZhY3RvcnMgc3VnZ2VzdGVkIGJ5IG1pbmltaXppbmcgQklDIHdlcmUgcXVhbGl0YXRpdmVseSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHRocmVlIGZhY3RvcnMgcmVwb3J0ZWQgYmVsb3csIGFuZCB0b2dldGhlciBhY2NvdW50ZWQgZm9yIGByIGVmYV9iaWNfZDFkX2FkJFZhY2NvdW50ZWRbIkN1bXVsYXRpdmUgUHJvcG9ydGlvbiIsICJGMyJdICU+JSByb3VuZCgyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UuIFRoZSBmb3VydGggYW5kIGZpZnRoIGZhY3RvcnMgZWFjaCBhY2NvdW50ZWQgZm9yICQ8JCBgciBlZmFfYmljX2QxZF9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsIGMoIkY0IiwgIkY1IildICU+JSBtYXgoKSAlPiUgY2VpbGluZ19kZWMoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLCBhbmQgbmVpdGhlciB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYW55IG9mIHRoZSA0MCBtZW50YWwgY2FwYWNpdGllcyBpbmNsdWRlZCBpbiB0aGlzIHN0dWR5LiBJbmRlZWQsIGZhY3RvciBsb2FkaW5ncyBmb3IgdGhlc2UgdHdvIGZhY3RvcnMgd2VyZSBhbGwgcXVpdGUgc21hbGwgKGFic29sdXRlIGxvYWRpbmdzIGFsbCAkPCQgYHIgZGF0YS5mcmFtZShsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV9iaWNfZDFkX2FkKSAlPiUgZmlsdGVyKGZhY3RvciAlaW4lIGMoIkY0IiwgIkY1IikpKSRtYXhfYWJzICU+JSBtYXgoKSAlPiUgY2VpbGluZ19kZWMoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWApLiAKCkdpdmVuIGFsbCB0aGlzLCBJIHdpbGwgb25jZSBtb3JlIGZvY3VzIHRoZSByZW1haW5kZXIgb2YgbXkgYW5hbHlzZXMgb24gdGhlIDMtZmFjdG9yIHNvbHV0aW9uIChidXQgc2VlIFtYWCBBUFBFTkRJWD9dIGZvciB0aGUgNC0gYW5kIDUtZmFjdG9yIHNvbHV0aW9ucykuCgojIyMjIFdoYXQgYXJlIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFkX2FkIDwtIGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpCmBgYAoKQWZ0ZXIgcm90YXRpb24sIHRoZSBmaXJzdCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIHRoYXQgSSBsYWJlbGVkIEJPRFkgaW4gU3R1ZGllcyAxYS0xYyAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMWRfYWQsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDFkX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uCgpUaGUgc2Vjb25kIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHRoZSBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGF0IEkgbGFiZWxlZCBIRUFSVCBpbiBTdHVkaWVzIDFhLTFjIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxZF9hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyB0aGF0IEkgcmVmZXJyZWQgdG8gYXMgTUlORCBpbiBTdHVkaWVzIDFhLTFjIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxZF9hZCwgNCwgIkYzIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gIAoKU2VlIEZpZ3VyZSAzLjEgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuCgpgYGB7cn0KcGxvdF9lZmFfd2RtX2QxYV9hZCA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2QxYV9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFhX2FkKSArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAxYSIsIHN1YnRpdGxlID0gIjMtZmFjdG9yIHNvbHV0aW9uIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGxvdF9lZmFfd2RtX2QxYl9hZCA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2QxYl9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFiX2FkKSArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAxYiIsIHN1YnRpdGxlID0gIjMtZmFjdG9yIHNvbHV0aW9uIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGxvdF9lZmFfd2RtX2QxY19hZCA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2QxY19hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFjX2FkKSArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAxYyIsIHN1YnRpdGxlID0gIjMtZmFjdG9yIHNvbHV0aW9uIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGxvdF9lZmFfd2RtX2QxZF9hZCA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2QxZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFkX2FkKSArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAxZCIsIHN1YnRpdGxlID0gIjMtZmFjdG9yIHNvbHV0aW9uIikKYGBgCgpgYGB7cn0KZmlndXJlMy4xIDwtIHBsb3RfZ3JpZChwbG90X2VmYV93ZG1fZDFhX2FkLCBwbG90X2VmYV93ZG1fZDFiX2FkLAogICAgICAgICAgICAgICAgICAgICAgIHBsb3RfZWZhX3dkbV9kMWNfYWQsIHBsb3RfZWZhX3dkbV9kMWRfYWQsCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gIkFVVE8iLCBuY29sID0gNCwgcmVsX3dpZHRocyA9IGMoMSwgMSwgMSwgMS4yKSkKCmZpZ3VyZTMuMV9jYXAgPC0gYWRkX3N1YihmaWd1cmUzLjEsIHN0cl93cmFwKCJGaWd1cmUgMy4xOiBGYWN0b3IgbG9hZGluZ3MgZnJvbSBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzZXMgb2YgU3R1ZGllcyAxYS0xZCAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiAoQS1CKSBJbiBTdHVkaWVzIDFhIGFuZCAxYiwgVVMgYWR1bHRzIGFzc2Vzc2VkIG9uZSBvZiB0d28gJ2VkZ2UgY2FzZScgY2hhcmFjdGVycyAoYSBiZWV0bGUgb3IgYSByb2JvdCkuIChDKSBJbiBTdHVkeSAxYywgVVMgYWR1bHRzIGFzc2VzcyBib3RoIG9mIHRoZXNlICdlZGdlIGNhc2VzJyBzaWRlIGJ5IHNpZGUgKHdpdGggbGVmdC1yaWdodCBwb3NpdGlvbiBjb3VudGVyYmFsYW5jZWQgYWNyb3NzIHBhcnRpY2lwYW50cykuIChEKSBJbiBTdHVkeSAxZCwgVVMgYWR1bHRzIGFzc2Vzc2VkIG9uZSBvZiAyMSBkaXZlcnNlIHRhcmdldCBjaGFyYWN0ZXJzLiBJbiB0aGlzIGFuZCBhbGwgZmlndXJlcyBwb3J0cmF5aW5nIGZhY3RvciBsb2FkaW5ncywgZmFjdG9ycyBoYXZlIGJlZW4gcGxvdHRlZCBpbiB0aGUgc2FtZSBvcmRlciAoQk9EWSwgSEVBUlQsIE1JTkQpLCB3aGVuIGFwcGxpY2FibGUsIHRvIGZhY2lsaXRhdGUgY29tcGFyaXNvbiBhY3Jvc3Mgc3R1ZGllcy4gQSBmYWN0b3IgbG9hZGluZyBvZiArMSBpbmRpY2F0ZXMgYSBwZXJmZWN0bHkgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gbWVudGFsIGNhcGFjaXR5IGFuZCB1bmRlcmx5aW5nIGNvbnN0cnVjdDsgYSBsb2FkaW5nIG9mIC0xIGluZGljYXRlcyBhIHBlcmZlY3RseSBuZWdhdGl2ZSByZWxhdGlvbnNoaXAuIiwgMjEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciBmaWd1cmUzLjEsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA5LCBmaWcuYXNwID0gMC42fQpnZ2RyYXcoZmlndXJlMy4xX2NhcCkKYGBgCgojIyBEaXNjdXNzaW9uCgpfX1hYIEFERCBERVNDUklQVElPTl9fCgojIFN0dWR5IDI6IENvbmNlcHR1YWwgY2hhbmdlIGJldHdlZW4gbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkgYW5kIGFkdWx0aG9vZAoKSW4gU3R1ZHkgMiwgYHIgbnJvdyhkMl9hZF93aWRlKWAgVVMgYWR1bHRzIGFuZCBgciBucm93KGQyXzc5X3dpZGUpYCBVUyBjaGlsZHJlbiBiZXR3ZWVuIHRoZSBhZ2VzIG9mIGByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKWAtYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpYCB5ZWFycyAobWVkaWFuOiBgciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKWB5KSBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMuIFRvIG1ha2UgdGhlIHN0dWR5IGFwcHJvcHJpYXRlIGZvciBjaGlsZHJlbiBpbiB0aGlzIGFnZSByYW5nZSwgdGhlIHdvcmRpbmcgb2Ygc29tZSB0aGUgNDAgbWVudGFsIGNhcGFjaXRpZXMgZW1wbG95ZWQgaW4gU3R1ZHkgMSB3YXMgbW9kaWZpZWQgdG8gdXNlIG1vcmUgYWdlLWFwcHJvcHJpYXRlIHZvY2FidWxhcnksIGFuZCBwYXJ0aWNpcGFudHMgcmVzcG9uZGVkIG9uIGEgMy1wb2ludCBzY2FsZSAoIm5vLCIgY29kZWQgYXMgMDsgImtpbmRhLCIgY29kZWQgYXMgMC41LCAieWVzLCIgY29kZWQgYXMgMSkuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIHJhbmRvbWx5IGFzc2lnbmVkIHRvIGFzc2VzcyBlaXRoZXIgYSBiZWV0bGUgb3IgYSByb2JvdC4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKIyMgUmVzdWx0cwoKIyMjIEFkdWx0cwoKIyMjIyBIb3cgbWFueSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CnJldGVuX3JlcG9ydFsiU3R1ZHkgMjogQWR1bHRzIixdCmBgYAoKYGBge3J9CmVmYV9wYXJfZDJfYWQgPC0gZmFfZnVuKGQyX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAyOiBBZHVsdHMiLCAicGFyIl0pCmVmYV9iaWNfZDJfYWQgPC0gZmFfZnVuKGQyX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAyOiBBZHVsdHMiLCAiYmljIl0pCmVmYV93ZG1fZDJfYWQgPC0gZmFfZnVuKGQyX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAyOiBBZHVsdHMiLCAid2RtIl0pCmBgYAoKYGBge3J9CmVmYV9wYXJfZDJfYWQkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV9wYXJfZDJfYWQpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX3Bhcl9kMl9hZCkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpUd28gb2YgdGhlIHRocmVlIHByb3RvY29scyBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgZmFjdG9ycyB0byByZXRhaW4gKG1pbmltaXppbmcgQklDIGFuZCB0aGUgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSBlbXBsb3llZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgU3R1ZHkgMTsgV2Vpc21hbiBldCBhbC4sIDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycywgd2hpbGUgdGhlIHRoaXJkIChwYXJhbGxlbCBhbmFseXNpcykgc3VnZ2VzdGVkIHJldGFpbmluZyBmb3VyIGZhY3RvcnM7IHNlZSBUYWJsZSAzLjEuIFVubGlrZSBpbiBTdHVkaWVzIDFhLTFkLCBpbiB3aGljaCBmYWN0b3JzIGJleW9uZCB0aGUgZmlyc3QgdGhyZWUgdW5pZm9ybWx5IGFjY291bnRlZCBmb3IgdmVyeSBzbWFsbCBhbW91bnRzIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UsIHdlcmUgbm90IHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGFueSBtZW50YWwgY2FwYWNpdGllcywgYW5kIHRlbmRlZCB0byBoYXZlIHNtYWxsIGZhY3RvciBsb2FkaW5ncyBmb3IgYWxsIG1lbnRhbCBjYXBhY2l0aWVzLCBub25lIG9mIHRoZXNlIGNvbnNpZGVyYXRpb25zIGNsZWFybHkgcnVsZXMgb3V0IHRoZSBmb3VydGggZmFjdG9yIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcy4gR2l2ZW4gdGhpcywgSSB3aWxsIHByZXNlbnQgYW5kIGludGVycHJldCBib3RoIDMtIGFuZCA0LWZhY3RvciBzb2x1dGlvbnMuCgojIyMjIFdoYXQgYXJlIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHM/CgojIyMjIyAzLWZhY3RvciBzb2x1dGlvbgoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyX2FkIDwtIGMoIkhFQVJUIiwgIkJPRFkiLCAiTUlORCIpCmBgYAoKRmlyc3QsIEkgd2lsbCBleGFtaW5lIHRoZSAzLWZhY3RvciBzb2x1dGlvbiBzdWdnZXN0ZWQgYnkgbWluaW1pemluZyBCSUMgYW5kIGJ5IHRoZSBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIGVtcGxveWVkIGluIHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbiBvZiBTdHVkeSAxIChXZWlzbWFuIGV0IGFsLidzLCAyMDE3KS4gSW1wb3J0YW50bHksIHRoaXMgaXMgdGhlIG51bWJlciBvZiBmYWN0b3JzIHJldGFpbmVkIGFtb25nIFVTIGFkdWx0cyBpbiBhbGwgZm91ciBvZiB0aGUgc2FtcGxlcyBpbmNsdWRlZCBpbiBTdHVkeSAxLgoKQWZ0ZXIgcm90YXRpb24sIHRoZSBmaXJzdCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgdGhhdCBJIGxhYmVsZWQgSEVBUlQgaW4gU3R1ZHkgMSAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMl9hZCwgNCwgIkYxIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLgoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIHRoYXQgSSBsYWJlbGVkIEJPRFkgaW4gU3R1ZHkgMSAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMl9hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAKClRoZSB0aGlyZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIHRoYXQgSSByZWZlcnJlZCB0byBhcyBNSU5EIGluIFN0dWR5IDEgKHNlZSBhbHNvIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDJfYWQsIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gIAoKU2VlIEZpZ3VyZSAzLjIgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuCgpJbiBzdW0sIGFzIGluIFN0dWR5IDEsIHRoaXMgdGhyZWUtZmFjdG9yIHNvbHV0aW9uIHdhcyBjaGFyYWN0ZXJpemVkIGJ5IGEgZGlzdGluY3Rpb24gYmV0d2VlbiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgY2hpbGQtZnJpZW5kbHkgcGFyYWRpZ20gZGV2ZWxvcGVkIGZvciBTdHVkeSAyIHdhcyB2YWxpZDogVXNpbmcgcmV3b3JkZWQgaXRlbXMgYW5kIGEgdGhyZWUtcG9pbnQgcmVzcG9uc2Ugc2NhbGUgZWxpY2l0ZWQgdGhlIHNhbWUgaW50dWl0aXZlIG9udG9sb2d5IG9mIG1lbnRhbCBsaWZlLCBhbW9uZyBhZHVsdHMsIHRoYXQgaGFzIGJlZW4gcmV2ZWFsZWQgYnkgbW9yZSBjb21wbGV4LCAiYWR1bHQtZnJpZW5kbHkiIGV4cGVyaW1lbnRhbCBwYXJhZGlnbXMuIAoKIyMjIyMgNC1mYWN0b3Igc29sdXRpb24KCmBgYHtyfQpmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kMl9hZCA8LSBjKCJCT0RZIiwgIkhFQVJUIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQgKGNvZ25pdGlvbikiLCAiTUlORCAocGVyY2VwdGlvbikiKQpgYGAKCkluIHRoZSBmb3VyLWZhY3RvciBzb2x1dGlvbiBzdWdnZXN0ZWQgYnkgcGFyYWxsZWwgYW5hbHlzaXMsIGFmdGVyIHJvdGF0aW9uLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyB0aGF0IEkgbGFiZWxlZCBCT0RZIGluIFN0dWR5IDEgKHNlZSBhbHNvIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDJfYWQsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV9wYXJfZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYXQgSSBsYWJlbGVkIEhFQVJUIGluIFN0dWR5IDEgKHNlZSBhbHNvIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDJfYWQsIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV9wYXJfZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIG1vcmUgImNvZ25pdGl2ZSIgb2YgdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyB0aGF0IEkgcmVmZXJyZWQgdG8gYXMgTUlORCBpbiBTdHVkeSAxIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfcGFyX2QyX2FkLCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfcGFyX2QyX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uICAKClRoZSBmb3VydGggZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIG1vcmUgInBlcmNlcHR1YWwiIG9mIHRoZSBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgdGhhdCBJIHJlZmVycmVkIHRvIGFzIE1JTkQgaW4gU3R1ZHkgMSAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3Bhcl9kMl9hZCwgNCwgIkY0IiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3Bhcl9kMl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGNCJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAgCgpTZWUgRmlndXJlIDMuMiBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4KCkkgd291bGQgc3VtbWFyaXplIHRoZSBmb3VyLWZhY3RvciBzb2x1dGlvbiBhcyBhIHNsaWdodCB2YXJpYW50IG9uIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb25zIGNvbW1vbiB0byBTdHVkaWVzIDFhLTFkIChhbmQgc3VyZmFjZWQgYnkgdGhlIG90aGVyIHR3byBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scyBmb3IgdGhpcyBzdHVkeSksIGFnYWluIGNoYXJhY3Rlcml6ZWQgYnkgZGlzdGluY3QgY29uc3RydWN0cyBvZiBCT0RZIGFuZCBIRUFSVCBidXQgZGVtb25zdHJhdGluZyBhIGZ1cnRoZXIgZGlmZmVyZW50aW9uIG9mIHdoYXQgSSd2ZSByZWZlcnJlZCB0byBhcyBNSU5EIGludG8gY29nbml0aXZlIGFiaWxpdGllcyB2cy4gcGVyY2VwdHVhbCBhYmlsaXRpZXMuCgojIyMgQ2hpbGRyZW4gKDctOXkpCgojIyMjIEhvdyBtYW55IGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KcmV0ZW5fcmVwb3J0WyJTdHVkeSAyOiBDaGlsZHJlbiIsXQpgYGAKCmBgYHtyfQplZmFfcGFyX2QyXzc5IDwtIGZhX2Z1bihkMl83OV93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMjogQ2hpbGRyZW4iLCAicGFyIl0pCmVmYV9iaWNfZDJfNzkgPC0gZmFfZnVuKGQyXzc5X3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAyOiBDaGlsZHJlbiIsICJiaWMiXSkKZWZhX3dkbV9kMl83OSA8LSBmYV9mdW4oZDJfNzlfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDI6IENoaWxkcmVuIiwgIndkbSJdKQpgYGAKCkFsbCB0aHJlZSBwcm90b2NvbHMgZm9yIGRldGVybWluaW5nIGhvdyBtYW55IGZhY3RvcnMgdG8gcmV0YWluIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9yczsgc2VlIFRhYmxlIDMuMS4KCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpjb25nX2VmYV93ZG1fZDJfYWRfNzkgPC0gY29uZ190YWJsZV9mdW4oZWZhX2FkID0gZWZhX3dkbV9kMl9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2ggPSBlZmFfd2RtX2QyXzc5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyX2FkKQpjb25nX2VmYV93ZG1fZDJfYWRfNzkKYGBgCgpgYGB7cn0KZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfNzkgPC0gYygiSEVBUlQiLCAiQk9EWSIsICJNSU5EIikKYGBgCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSB3aXRoIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gYW1vbmcgYWR1bHRzIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBIRUFSVCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfd2RtX2QyX2FkLCBlZmFfY2ggPSBlZmFfd2RtX2QyXzc5LCBmYWN0b3IgPSAiRjEiLCBmYWN0b3JfbmFtZXNfYWQgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZClgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDJfNzksIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDJfNzkkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgQk9EWSBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfd2RtX2QyX2FkLCBlZmFfY2ggPSBlZmFfd2RtX2QyXzc5LCBmYWN0b3IgPSAiRjIiLCBmYWN0b3JfbmFtZXNfYWQgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZClgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDJfNzksIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDJfNzkkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgTUlORCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfd2RtX2QyX2FkLCBlZmFfY2ggPSBlZmFfd2RtX2QyXzc5LCBmYWN0b3IgPSAiRjMiLCBmYWN0b3JfbmFtZXNfYWQgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZClgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDJfNzksIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDJfNzkkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gIAoKU2VlIEZpZ3VyZSAzLjIgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuCgpJbiBzdW0sIGxpa2UgYWR1bHRzIGluIFN0dWR5IDEsIGFuZCBsaWtlIHRoZSAzLWZhY3RvciBzdW1tYXJ5IG9mIGFkdWx0cyBpbiB0aGUgY3VycmVudCBzdHVkeSwgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbidzIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgd2VyZSBkb21pbmF0ZWQgYnkgYSB0aHJlZS13YXkgZGlzdGluY3Rpb24gYmV0d2VlbiBwaHlzaW9sb2dpY2FsLCBzb2NpYWwtZW1vdGlvbmFsLCBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVz4oCUaS5lLiwgQk9EWSwgSEVBUlQsIGFuZCBNSU5ELgoKYGBge3J9CnBsb3RfZWZhX3dkbV9kMl9hZCA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2QyX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZCkgKwogIGxhYnModGl0bGUgPSAiQWR1bHRzIiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90X2VmYV9wYXJfZDJfYWQgPC0gaGVhdG1hcF9mdW4oZWZhX3Bhcl9kMl9hZCwgZmFjdG9yX25hbWVzX2VmYV9wYXJfZDJfYWQpICsKICBsYWJzKHRpdGxlID0gIkFkdWx0cyIsIHN1YnRpdGxlID0gIjQtZmFjdG9yIHNvbHV0aW9uIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGxvdF9lZmFfd2RtX2QyXzc5IDwtIGhlYXRtYXBfZnVuKGVmYV93ZG1fZDJfNzksIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyXzc5KSArCiAgbGFicyh0aXRsZSA9ICJDaGlsZHJlbiwgNy05eSIsIHN1YnRpdGxlID0gIjMtZmFjdG9yIHNvbHV0aW9uIikKYGBgCgpgYGB7cn0KZmlndXJlMy4yIDwtIHBsb3RfZ3JpZChwbG90X2VmYV93ZG1fZDJfYWQsIHBsb3RfZWZhX3Bhcl9kMl9hZCwKICAgICAgICAgICAgICAgICAgICAgICBwbG90X2VmYV93ZG1fZDJfNzksCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gIkFVVE8iLCBuY29sID0gMywgcmVsX3dpZHRocyA9IGMoMSwgMS4yLCAxLjIpKQoKZmlndXJlMy4yX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTMuMiwgc3RyX3dyYXAoIkZpZ3VyZSAzLjI6IEZhY3RvciBsb2FkaW5ncyBmcm9tIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNlcyBvZiBTdHVkeSAyLCBpbiB3aGljaCBwYXJ0aWNpcGFudHMgYXNzZXNzZWQgb25lIG9mIHR3byAnZWRnZSBjYXNlJyBjaGFyYWN0ZXJzIChhIGJlZXRsZSBvciBhIHJvYm90KS4gKEEpIFJlc3VsdHMgZm9yIFVTIGFkdWx0cywgcmV0YWluaW5nIDMgZmFjdG9ycyAoYXMgc3VnZ2VzdGVkIGJ5IG1pbmltaXppbmcgQklDIGFuZCBieSB0aGUgb3JpZ2luYWwgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSByZXBvcnRlZCBpbiBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIChCKSBSZXN1bHRzIGZvciBVUyBhZHVsdHMsIHJldGFpbmluZyA0IGZhY3RvcnMgKGFzIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcykuIChDKSBSZXN1bHRzIGZvciBVUyBjaGlsZHJlbiBhZ2VzIDctOXkuIEluIHRoaXMgYW5kIGFsbCBmaWd1cmVzIHBvcnRyYXlpbmcgZmFjdG9yIGxvYWRpbmdzLCBmYWN0b3JzIGhhdmUgYmVlbiBwbG90dGVkIGluIHRoZSBzYW1lIG9yZGVyIChCT0RZLCBIRUFSVCwgTUlORCksIHdoZW4gYXBwbGljYWJsZSwgdG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGFjcm9zcyBzdHVkaWVzLiBBIGZhY3RvciBsb2FkaW5nIG9mICsxIGluZGljYXRlcyBhIHBlcmZlY3RseSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtZW50YWwgY2FwYWNpdHkgYW5kIHVuZGVybHlpbmcgY29uc3RydWN0OyBhIGxvYWRpbmcgb2YgLTEgaW5kaWNhdGVzIGEgcGVyZmVjdGx5IG5lZ2F0aXZlIHJlbGF0aW9uc2hpcC4iLCAyMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyIGZpZ3VyZTMuMiwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjZ9CmdnZHJhdyhmaWd1cmUzLjJfY2FwKQpgYGAKCiMjIERpc2N1c3Npb24KCkV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNlcyBzdWdnZXN0ZWQgdGhhdCBieSBtaWRkZGxlIGNoaWxkaG9vZCAoNy05eSksIHRoZSBjb25jZXB0dWFsIHN0cnVjdHVyZSB1bmRlcmx5aW5nIFVTIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIG1lbnRhbCBsaWZlIGlzIHZlcnkgc2ltaWxhciB0byB0aGF0IG9mIFVTIGFkdWx0cywgYW5jaG9yZWQgYnkgc3VpdGVzIG9mIG1lbnRhbCBjYXBhY2l0aWVzIHJlbGF0ZWQgdG8gQk9EWSAocGh5c2lvbG9naWNhbCBzZW5zYXRpb25zKSwgSEVBUlQgKHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzKSwgYW5kIE1JTkQgKHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcykuIEluIHByaW5jaXBsZSwgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBvciBhbHRlcm5hdGl2ZSBsYXRlbnQgZmFjdG9ycyBjb3VsZCBoYXZlIGVtZXJnZWQgZnJvbSB0aGUgZmFjdG9yIGFuYWx5c2lzIG9mIGNoaWxkcmVuJ3MgcmVzcG9uc2VzLiBGb3IgZXhhbXBsZSwgY2hpbGRyZW4gbWlnaHQgaGF2ZSBkaXN0aW5ndWlzaGVkIHByaW1hcmlseSBiZXR3ZWVuIGludGVybmFsIGV4cGVyaWVuY2UgYW5kIGV4dGVybmFsIGFjdGlvbiAoR3JheSBldCBhbC4sIDIwMDcpLCBvciB0aGV5IG1pZ2h0IGhhdmUgZGVtb25zdHJhdGVkIGZpbmVyLWdyYWluZWQgZ3JvdXBpbmdzIG9mIG1lbnRhbCBjYXBhY2l0aWVzIGJhc2VkIG9uIHBocmFzaW5nLCByb3RlIGtub3dsZWRnZSwgZXRjLiBJbnN0ZWFkLCB0aGUgbGF0ZW50IGNvbmNlcHR1YWwgc3RydWN0dXJlIHVuZGVybHlpbmcgY2hpbGRyZW4ncyByZXNwb25zZXMgYXBwZWFycyB0byBiZSB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiBhZHVsdHMsIGJvdGggaW4gdGhpcyBzdHVkeSBhbmQgaW4gV2Vpc21hbiBldCBhbC4ncyAoMjAxNykgcHJldmlvdXMgd29yay4gSW4gb3RoZXIgd29yZHMsIGFueSBkcmFtYXRpYyBkZXZlbG9wbWVudGFsIGNoYW5nZXMgdG8gdGhpcyBjb25jZXB0dWFsIHN0cnVjdHVyZSBsaWtlbHkgb2NjdXIgcHJpb3IgdG8gdGhlIGFnZSBvZiA3IHllYXJzLgoKCiMgU3R1ZHkgMzogQ29uY2VwdHVhbCBjaGFuZ2Ugb3ZlciBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAoNC05eSkKCldpdGggcmVnYXJkIHRvIGlkZW50aWZ5aW5nIGRldmVsb3BtZW50YWwgY2hhbmdlcyBpbiBjb25jZXB0dWFsIHVuaXRzLCB0aGUgZ29hbHMgb2YgU3R1ZHkgMyB3ZXJlIHR3by1mb2xkLiAKCkZpcnN0LCBJIGFpbWVkIHRvIGV4dGVuZCB0aGUgZmluZGluZ3Mgd2l0aCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIgYnkgZXhwYW5kaW5nIHRoZSBsaXN0IG9mIHRoZSB0YXJnZXQgY2hhcmFjdGVycyB0byBpbmNsdWRlIG5vdCBvbmx5IHRoZSB0d28gImVkZ2UgY2FzZXMiIGZyb20gU3R1ZHkgMiAoYSBiZWV0bGUgYW5kIGEgcm9ib3QpLCBidXQgYSBhbHNvIGEgd2lkZXIgcmFuZ2Ugb2YgYW5pbWF0ZSBiZWluZ3MgKGEgYmlyZCwgYSBnb2F0LCBhbmQgYW4gZWxlcGhhbnQpIGFuZCBpbmFuaW1hdGUgb2JqZWN0cyAoYSBjb21wdXRlciwgYSB0ZWRkeSBiZWFyLCBhbmQgYSBkb2xsKeKAlGluIG90aGVyIHdvcmRzLCBlbXBsb3lpbmcgdGhlICJkaXZlcnNlIGNoYXJhY3RlcnMiIChyYXRoZXIgdGhhbiAiZWRnZSBjYXNlIikgdmFyaWFuY2Ugb2YgdGhlIG92ZXJhbGwgYXBwcm9hY2guIEluIFN0dWR5IDEsIHRoZXNlIHR3byBhcHByb2FjaGVzIHlpZWxkZWQgdmVyeSBzaW1pbGFyIHBpY3R1cmVzIG9mIHRoZSBjb25jZXB0dWFsIHVuaXRzIGF2YWlsYWJsZSB0byBhZHVsdHMgKHNlZSBhbHNvIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSSByZWFzb25lZCB0aGF0IGlmIHRoaXMgdGhyZWUtcGFydCBjb25jZXB0dWFsIHN0cnVjdHVyZSBpcyBzdGFibGUgYW5kIHJvYnVzdCBieSB0aGUgYWdlIG9mIDctOSB5ZWFycywgaXQgc2hvdWxkIG1hbmlmZXN0IGFtb25nIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gdW5kZXIgdGhlIHNhbWUgcmFuZ2Ugb2YgY29uZGl0aW9ucyB0aGF0IGl0IGRvZXMgYW1vbmcgYWR1bHRzLiAKClRoZSBzZWNvbmQgZ29hbCB3YXMgdG8gYXNzZXNzIHRoZSBlYXJsaWVyIGRldmVsb3BtZW50IG9mIGNvbmNlcHR1YWwgc3RydWN0dXJlIGluIGEgZ3JvdXAgb2YgeW91bmdlciBjaGlsZHJlbi4gSSB0YXJnZXRlZCA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuIGZvciBvdXIgeW91bmdlciBhZ2UgZ3JvdXAgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIGlkZW50aWZpZWQgYXMgYSBwZXJpb2Qgb2YgZHJhbWF0aWMgZGV2ZWxvcG1lbnQgaW4gc2V2ZXJhbCByZWxldmFudCBkb21haW5zLiBNYW55IHN0dWRpZXMgaGF2ZSBkb2N1bWVudGVkIHNoaWZ0cyBpbiBjaGlsZHJlbidzIGFiaWxpdGllcyB0byB0YWtlIG90aGVycycgcGVyc3BlY3RpdmVzLCByZXByZXNlbnQgZmFsc2UgYmVsaWVmcywgYW5kIGludGVncmF0ZSByZXByZXNlbnRhdGlvbnMgb2YgaW50ZW50aW9ucyBhbmQgb3V0Y29tZXMgaW4gZXZhbHVhdGluZyBtb3JhbCByZXNwb25zaWJpbGl0eSAoZm9yIHJldmVpd3MsIHNlZSBGbGF2ZWxsLCAxOTk5OyBXZWxsbWFuLCAyMDE1KS4gVGhlIHByZXNjaG9vbCB5ZWFycyBoYXZlIGFsc28gYmVlbiB0aGUgZm9jdXMgb2YgYSByaWNoIHRyYWRpdGlvbiBvZiB3b3JrIG9uIGxheSBiaW9sb2d5IGFuZCB0aGUgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gZXh0ZW5kaW5nIGJhY2sgbmVhcmx5IGEgY2VudHVyeSAoZS5nLiwgQ2FyZXksIDE5ODU7IFIuIEdlbG1hbiwgU3BlbGtlLCAmIE1lY2ssIDE5ODM7IE1lZGluLCBXYXhtYW4sIFdvb2RyaW5nLCAmIFdhc2hpbmF3YXRvaywgMjAxMDsgUGlhZ2V0LCAxOTI5OyBmb3IgYSByZXZpZXcsIHNlZSBTLiBHZWxtYW4gJiBPcGZlciwgMjAwMikuIEFsbCBvZiB0aGVzZSBhY2NvdW50cyBtYWtlIHRoZSBjYXNlIHRoYXQgYmVjb21pbmcgYSBzb3BoaXN0aWNhdGVkIHJlYXNvbmVy4oCUYW5kIHBhcnRpY3VsYXJseSBhIHNvcGhpc3RpY2F0ZWQgc29jaWFsIHJlYXNvbmVy4oCUcmVxdWlyZXMgc3Vic3RhbnRpYWwgcmVmaW5lbWVudCBvZiBvbmUncyByZXByZXNlbnRhdGlvbnMgb2Ygb3RoZXJzJyBleHBlcmllbmNlcywgYmVsaWVmcywgZGVzaXJlcywgYW5kIG5lZWRzLiBNaWdodCB0aGVzZSByZWZpbmVtZW50cyBpbmNsdWRlIGNoYW5nZXMgdG8gdGhlIHN0cnVjdHVyZSBvZiBjaGlsZHJlbidzIGNvbmNlcHRzIG9mIG1lbnRhbCBsaWZlPyAKCkluIFN0dWR5IDMsIGByIG5yb3coZDNfYWRfd2lkZSlgIFVTIGFkdWx0cywgYHIgbnJvdyhkM183OV93aWRlKWAgIm9sZGVyIiBjaGlsZHJlbiAoYHIgc3VtbWFyeShkM183OSRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpYC1gciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMilgIHllYXJzOyBtZWRpYW46IGByIHN1bW1hcnkoZDNfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYHkpLCBhbmQgYHIgbnJvdyhkM180Nl93aWRlKWAgInlvdW5nZXIiIGNoaWxkcmVuIChgciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMilgLWByIHN1bW1hcnkoZDNfNDYkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKWAgeWVhcnM7IG1lZGlhbjogYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMilgeSkgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDIwIG1lbnRhbCBjYXBhY2l0aWVzLiBQYXJ0aWNpcGFudHMgd2VyZSByYW5kb21seSBvciBwc2V1ZG8tcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIGVpdGhlciBvbmUgb2YgdGhlIGZvbGxvd2luZyA5IGNoYXJhY3RlcnM6IGFuIGVsZXBoYW50LCBhIGdvYXQsIGEgbW91c2UsIGEgYmlyZCwgYSBiZWV0bGUsIGEgdGVkZHkgYmVhciwgYSBkb2xsLCBhIHJvYm90LCBvciBhIGNvbXB1dGVyLiBUbyBtYWtlIHRoZSBzdHVkeSBhcHByb3ByaWF0ZSBmb3IgY2hpbGRyZW4gYXMgeW91bmcgYXMgNCB5ZWFycyBvZiBhZ2UsIHBhcnRpY2lwYW50cyBhc3Nlc3NlZCBhIHN1YnNldCBvZiB0aGUgNDAgbWVudGFsIGNhcGFjaXRpZXMgZW1wbG95ZWQgaW4gU3R1ZHkgMiwgY2hvc2VuIHRvIHJlcHJlc2VudCB0aGUgdGhyZWUgImNvbmNlcHR1YWwgdW5pdHMiIHJldmVhbGVkIGJ5IFN0dWRpZXMgMS0yIChCT0RZLCBIRUFSVCwgYW5kIE1JTkQpIGFuZCB0byBjb3ZlciBhIHNpbWlsYXIgcmFuZ2Ugb2YgbWVudGFsIGNhcGFjaXRpZXMgYXMgU3R1ZGllcyAxLTIuIEFzIGluIFN0dWR5IDIsIHBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSAzLXBvaW50IHNjYWxlICgibm8sIiBjb2RlZCBhcyAwOyAia2luZGEsIiBjb2RlZCBhcyAwLjUsICJ5ZXMsIiBjb2RlZCBhcyAxKS4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKIyMgUmVzdWx0cwoKIyMjIEFkdWx0cwoKIyMjIyBIb3cgbWFueSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CnJldGVuX3JlcG9ydFsiU3R1ZHkgMzogQWR1bHRzIixdCmBgYAoKYGBge3J9CmVmYV9wYXJfZDNfYWQgPC0gZmFfZnVuKGQzX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAzOiBBZHVsdHMiLCAicGFyIl0pCmVmYV9iaWNfZDNfYWQgPC0gZmFfZnVuKGQzX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAzOiBBZHVsdHMiLCAiYmljIl0pCmVmYV93ZG1fZDNfYWQgPC0gZmFfZnVuKGQzX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAzOiBBZHVsdHMiLCAid2RtIl0pCmBgYAoKYGBge3J9CmVmYV9iaWNfZDNfYWQkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV9iaWNfZDNfYWQpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX2JpY19kM19hZCkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpUd28gb2YgdGhlIHRocmVlIHByb3RvY29scyBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgZmFjdG9ycyB0byByZXRhaW4gKHBhcmFsbGVsIGFuYWx5c2lzIGFuZCB0aGUgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSBlbXBsb3llZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgU3R1ZHkgMTsgV2Vpc21hbiBldCBhbC4sIDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycywgd2hpbGUgdGhlIHRoaXJkIChtaW5pbWl6aW5nIEJJQykgc3VnZ2VzdGVkIHJldGFpbmluZyBmb3VyIGZhY3RvcnM7IHNlZSBUYWJsZSAzLjEuIEhvd2V2ZXIsIG11Y2ggYXMgaW4gU3R1ZGllcyAxYS0xZCwgdGhyZWUgb2YgdGhlIGZvdXIgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgbWluaW1pemluZyBCSUMgd2VyZSBxdWFsaXRhdGl2ZWx5IHZlcnkgc2ltaWxhciB0byB0aGUgdGhyZWUgZmFjdG9ycyByZXBvcnRlZCBiZWxvdywgYW5kIHRvZ2V0aGVyIGFjY291bnRlZCBmb3IgYHIgZWZhX2JpY19kM19hZCRWYWNjb3VudGVkWyJDdW11bGF0aXZlIFByb3BvcnRpb24iLCAiRjMiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLiBUaGUgZm91cnRoIGZhY3RvciBhY2NvdW50ZWQgZm9yIG9ubHkgYHIgZWZhX2JpY19kM19hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGNCJdICU+JSByb3VuZCgyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UsIHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBvbmx5IG9uZSBvZiB0aGUgNDAgbWVudGFsIGNhcGFjaXRpZXMgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeSAoYHIgdG9wX25fZG9tQ2FwKGVmYV9iaWNfZDNfYWQsIG4gPSAxLCAiRjQiLCBhYnNfcG9zID0gImFicyIpYCksIGFuZCBoYWQgbW9kZXJhdGVseSBzbWFsbCBmYWN0b3IgbG9hZGluZ3MgZm9yIGFsbCBjYXBhY2l0aWVzIChhYnNvbHV0ZSBsb2FkaW5ncyBhbGwgJDwkIGByIGVmYV9iaWNfZDNfYWQgJT4lIGxvYWRpbmdzX2Z1bigpICU+JSBmaWx0ZXIoY2FwYWNpdHkgIT0gImZlZWwgaGFwcHkiLCBmYWN0b3IgPT0gIkY0IikgJT4lIHN1bW1hcmlzZShtYXhfYWJzID0gbWF4KGFicyhsb2FkaW5nKSkpICU+JSBhcy5udW1lcmljKCkgJT4lIGNlaWxpbmdfZGVjKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgKS4gR2l2ZW4gYWxsIHRoaXMsIEkgd2lsbCBhZ2FpbiBmb2N1cyB0aGUgcmVtYWluZGVyIG9mIG15IGFuYWx5c2VzIG9uIHRoZSAzLWZhY3RvciBzb2x1dGlvbiAoYnV0IHNlZSBbWFggQVBQRU5ESVg/XSBmb3IgdGhlIDQtZmFjdG9yIHNvbHV0aW9uKS4KCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZCA8LSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKQpgYGAKCkFmdGVyIHJvdGF0aW9uLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyB0aGF0IEkgbGFiZWxlZCBCT0RZIGluIFN0dWRpZXMgMS0yIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QzX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uCgpUaGUgc2Vjb25kIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHRoZSBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGF0IEkgbGFiZWxlZCBIRUFSVCBpbiBTdHVkaWVzIDEtMiAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM19hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kM19hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAKClRoZSB0aGlyZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIHRoYXQgSSByZWZlcnJlZCB0byBhcyBNSU5EIGluIFN0dWRpZXMgMS0yIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QzX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uICAKClNlZSBGaWd1cmUgMy4zIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLgoKSW4gc3VtLCBhcyBpbiBTdHVkeSAxIGFuZCB0aGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9uIGZvciBTdHVkeSAyLCB0aGUgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgcmV2ZWFsZWQgYnkgdGhpcyBhbmFseXNpcyBhbW9uZyBhZHVsdHMgd2FzIGNoYXJhY3Rlcml6ZWQgYnkgYSB0aHJlZS13YXkgZGlzdGluY3Rpb24gYmV0d2VlbiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgbW9kaWZpZWQgY2hpbGQtZnJpZW5kbHkgcGFyYWRpZ20gZGV2ZWxvcGVkIGZvciBTdHVkeSAzIHdhcyB2YWxpZDogVXNpbmcgYSBzaG9ydGVyIGxpc3Qgb2YgaXRlbXMgYW5kIGEgd2lkZXIgcmFuZ2Ugb2YgdGFyZ2V0IGNoYXJhY3RlcnMgZWxpY2l0ZWQgdGhlIHNhbWUgaW50dWl0aXZlIG9udG9sb2d5IG9mIG1lbnRhbCBsaWZlLCBhbW9uZyBVUyBhZHVsdHMsIHRoYXQgd2FzIHJldmVhbGVkIGluIFN0dWR5IDEgYW5kIGluIFdlaXNtYW4gZXQgYWwuJ3MgKDIwMTcpIHByZXZpb3VzIHdvcmsuIAoKIyMjIE9sZGVyIGNoaWxkcmVuICg3LTl5KQoKIyMjIyBIb3cgbWFueSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CnJldGVuX3JlcG9ydFsiU3R1ZHkgMzogT2xkZXIgY2hpbGRyZW4iLF0KYGBgCgpgYGB7cn0KZWZhX3Bhcl9kM183OSA8LSBmYV9mdW4oZDNfNzlfd2lkZV9pLCAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ZW5fcmVwb3J0WyJTdHVkeSAzOiBPbGRlciBjaGlsZHJlbiIsICJwYXIiXSkKZWZhX2JpY19kM183OSA8LSBmYV9mdW4oZDNfNzlfd2lkZV9pLCAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ZW5fcmVwb3J0WyJTdHVkeSAzOiBPbGRlciBjaGlsZHJlbiIsICJiaWMiXSkKZWZhX3dkbV9kM183OSA8LSBmYV9mdW4oZDNfNzlfd2lkZV9pLCAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ZW5fcmVwb3J0WyJTdHVkeSAzOiBPbGRlciBjaGlsZHJlbiIsICJ3ZG0iXSkKYGBgCgpBcyB3YXMgdGhlIGNhc2UgYW1vbmcgdGhpcyBhZ2UgZ3JvdXAgaW4gU3R1ZHkgMiwgYWxsIHRocmVlIHByb3RvY29scyBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgZmFjdG9ycyB0byByZXRhaW4gc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzOyBzZWUgVGFibGUgMy4xLgoKIyMjIyBXaGF0IGFyZSB0aGVzZSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CmNvbmdfZWZhX3dkbV9kM19hZF83OSA8LSBjb25nX3RhYmxlX2Z1bihlZmFfYWQgPSBlZmFfd2RtX2QzX2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX2NoID0gZWZhX3dkbV9kM183OSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzX2FkKQpjb25nX2VmYV93ZG1fZDNfYWRfNzkKYGBgCgpgYGB7cn0KZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkgPC0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikKYGBgCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgY29uZmlybWVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEJPRFkgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3dkbV9kM19hZCwgZWZhX2NoID0gZWZhX3dkbV9kM183OSwgZmFjdG9yID0gIkYxIiwgZmFjdG9yX25hbWVzX2FkID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzXzc5LCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QzXzc5JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uCgpUaGUgc2Vjb25kIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgSEVBUlQgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3dkbV9kM19hZCwgZWZhX2NoID0gZWZhX3dkbV9kM183OSwgZmFjdG9yID0gIkYyIiwgZmFjdG9yX25hbWVzX2FkID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzXzc5LCA0LCAiRjIiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QzXzc5JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uIAoKVGhlIHRoaXJkIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgY29uZmlybWVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIE1JTkQgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3dkbV9kM19hZCwgZWZhX2NoID0gZWZhX3dkbV9kM183OSwgZmFjdG9yID0gIkYzIiwgZmFjdG9yX25hbWVzX2FkID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzXzc5LCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QzXzc5JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uCgpTZWUgRmlndXJlIDMuMyBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4gKE5vdGUgdGhhdCB0byBlYXNlIGNvbXBhcmlzb24gYWNyb3NzIHN0dWRpZXMgSSBoYXZlIHBsb3R0ZWQgdGhlc2UgZmFjdG9ycyBpbiB0aGUgc2FtZSBvcmRlciBmb3IgYWxsIHN0dWRpZXM6IEJPRFksIEhFQVJULCBhbmQgTUlORC4pCgpJIGNvbnNpZGVyIHRoaXMgdG8gYmUgYSBjbG9zZSBjb25jZXB0dWFsIHJlcGxpY2F0aW9uIG9mIFN0dWR5IDEsIHN1Z2dlc3RpbmcgdGhhdCBieSB0aGUgYWdlIG9mIDctOSB5ZWFycywgdGhpcyB0aHJlZS1wYXJ0IGNvbmNlcHR1YWwgc3RydWN0dXJlIGlzIHN0YWJsZSBhbmQgcm9idXN0IHRvIGEgcmFuZ2Ugb2YgZXhwZXJpbWVudGFsIGNvbmRpdGlvbnMuCgojIyMgWW91bmdlciBjaGlsZHJlbiAoNC02eSkKCiMjIyMgSG93IG1hbnkgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpyZXRlbl9yZXBvcnRbIlN0dWR5IDM6IFlvdW5nZXIgY2hpbGRyZW4iLF0KYGBgCgpgYGB7cn0KZWZhX3Bhcl9kM180NiA8LSBmYV9mdW4oZDNfNDZfd2lkZV9pLCAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ZW5fcmVwb3J0WyJTdHVkeSAzOiBZb3VuZ2VyIGNoaWxkcmVuIiwgInBhciJdKQplZmFfYmljX2QzXzQ2IDwtIGZhX2Z1bihkM180Nl93aWRlX2ksIAogICAgICAgICAgICAgICAgICAgICAgICByZXRlbl9yZXBvcnRbIlN0dWR5IDM6IFlvdW5nZXIgY2hpbGRyZW4iLCAiYmljIl0pCmVmYV93ZG1fZDNfNDYgPC0gZmFfZnVuKGQzXzQ2X3dpZGVfaSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldGVuX3JlcG9ydFsiU3R1ZHkgMzogWW91bmdlciBjaGlsZHJlbiIsICJ3ZG0iXSkKYGBgCgpgYGB7cn0KZWZhX2JpY19kM180NiRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX2JpY19kM180NikKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QzXzQ2KSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWZhY3RvciksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyfQplZmFfcGFyX2QzXzQ2JFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfcGFyX2QzXzQ2KQpsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV9wYXJfZDNfNDYpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKYGBge3J9CmVmYV93ZG1fZDNfNDYkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV93ZG1fZDNfNDYpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX3dkbV9kM180NikgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpFYWNoIG9mIHRoZSB0aHJlZSBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scyBzdWdnZXN0ZWQgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gcmV0YWluOyBzZWUgVGFibGUgMy4xLgoKTWluaW1pemluZyBCSUMgYW5hbHlzaXMgc3VnZ2VzdGVkIHJldGFpbmluZyBhIHNpbmdsZSBmYWN0b3LigJRpbiBvdGhlciB3b3Jkcywgc3VnZ2VzdGVkIHRoYXQgdGhlcmUgd2FzIG5vIGV2aWRlbmNlIGZvciBtb3JlIHRoYW4gb25lIGxhdGVudCBjb25zdHJ1Y3QuICAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RlZCByZXRhaW5pbmcgdHdvIGZhY3RvcnMuIEVhY2ggb2YgdGhlc2UgZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UsIHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzZXZlcmFsIG1lbnRhbCBjYXBhY2l0aWVzLCBhbmQgaGFkIHN0cm9uZyBmYWN0b3IgbG9hZGluZ3MgZm9yIHNvbWUgc3Vic2V0IG9mIG1lbnRhbCBjYXBhY2l0aWVzLgoKVGhlIHJldGVudGlvbiBjcml0ZXJpYSBlbXBsb3llZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgU3R1ZHkgMTsgV2Vpc21hbiBldCBhbC4sIDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycy4gQWdhaW4sIGVhY2ggb2YgdGhlc2UgZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UsIHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzZXZlcmFsIG1lbnRhbCBjYXBhY2l0aWVzLCBhbmQgaGFkIHN0cm9uZyBmYWN0b3IgbG9hZGluZ3MgZm9yIHNvbWUgc3Vic2V0IG9mIG1lbnRhbCBjYXBhY2l0aWVzLgoKR2l2ZW4gYWxsIHRoaXMsIEkgd2lsbCBwcmVzZW50IGFuZCBpbnRlcnByZXQgYm90aCAyLSBhbmQgMy1mYWN0b3Igc29sdXRpb25zIChidXQgc2VlIFtYWCBBUFBFTkRJWD9dIGZvciB0aGUgbnVsbCwgMS1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IG1pbmltaXppbmcgQklDKS4KCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCiMjIyMjIDItZmFjdG9yIHNvbHV0aW9uCgpgYGB7cn0KY29uZ19lZmFfcGFyX2QzX2FkXzQ2IDwtIGNvbmdfdGFibGVfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDNfYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2ggPSBlZmFfcGFyX2QzXzQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfYWQpCmNvbmdfZWZhX3Bhcl9kM19hZF80NgpgYGAKCmBgYHtyfQpmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NiA8LSBjKCJCT0RZLUhFQVJUIiwgIk1JTkQiKQpgYGAKCkZpcnN0LCBJIHdpbGwgZXhhbWluZSB0aGUgMi1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHBhcmFsbGVsIGFuYWx5c2lzLiAKCkluIHRoZSByb3RhdGVkIHR3by1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHBhcmFsbGVsIGFuYWx5c2lzLCB0aGUgZmlyc3QgZmFjdG9yIGVuY29tcGFzc2VkIGJvdGggcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIGFuZCBlbW90aW9ucy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgaW5kaWNhdGVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEJPRFkgZmFjdG9yLCBidXQgd2FzIGFsc28gcXVpdGUgc2ltaWxhciB0byBhZHVsdHMnIEhFQVJUIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV9wYXJfZDNfYWQsIGVmYV9jaCA9IGVmYV9wYXJfZDNfNDYsIGZhY3RvciA9ICJGMSIsIGZhY3Rvcl9uYW1lc19hZCA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3Bhcl9kM180NiwgNCwgIkYxIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3Bhcl9kM180NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdHdvLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgc2Vjb25kIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcywgYXMgd2VsbCBhcyBvbmUgY29tcGxleCBuZWdhdGl2ZSBlbW90aW9uIChfZmVlbCBndWlsdHlfKS4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgY29uZmlybWVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIE1JTkQgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3Bhcl9kM19hZCwgZWZhX2NoID0gZWZhX3Bhcl9kM180NiwgZmFjdG9yID0gIkYyIiwgZmFjdG9yX25hbWVzX2FkID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfcGFyX2QzXzQ2LCA0LCAiRjIiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfcGFyX2QzXzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uCgpTZWUgRmlndXJlIDMuMyBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4KCkluIHJlbGF0aW9uIHRvIHRoZSBCT0RZLUhFQVJULU1JTkQgc3RydWN0dXJlIGZvdW5kIGFtb25nIG9sZGVyIGNoaWxkcmVuIGFuZCBhZHVsdHMsIEkgd291bGQgZGVzY3JpYmUgdGhpcyB0d28tZmFjdG9yIHN0cnVjdHVyZSBhcyBiZWluZyBhbmNob3JlZCBieSBhIGNvbnRyYXN0IGJldHdlZW4gdGhlIGNvZ25pdGl2ZSBjYXBhY2l0aWVzIG9mIHRoZSBNSU5EIHZzLiBhIHNldCBvZiB3YXJtZXIsIG1vcmUgdmlzZXJjYWwgZXhwZXJpZW5jZXMgdGhhdCBjb25zdGl0dXRlIGEgbW9yZSBpbnRlZ3JhdGVkIHJlcHJlc2VudGF0aW9uIG9mIEJPRFktSEVBUlQuCgojIyMjIyAzLWZhY3RvciBzb2x1dGlvbgoKYGBge3J9CmNvbmdfZWZhX3dkbV9kM19hZF80NiA8LSBjb25nX3RhYmxlX2Z1bihlZmFfYWQgPSBlZmFfd2RtX2QzX2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX2NoID0gZWZhX3dkbV9kM180NiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzX2FkKQpjb25nX2VmYV93ZG1fZDNfYWRfNDYKYGBgCgpgYGB7cn0KZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYgPC0gYygiQk9EWSoiLCAiTUlORCIsICJIRUFSVCoiKQpgYGAKCkkgd2lsbCBub3cgdHVybiB0byB0aGUgMy1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHRoZSBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIGVtcGxveWVkIGluIHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbiBvZiBTdHVkeSAxIChXZWlzbWFuIGV0IGFsLidzLCAyMDE3KS4gSW1wb3J0YW50bHksIHRoaXMgaXMgYWxzbyB0aGUgbnVtYmVyIG9mIGZhY3RvcnMgcmV0YWluZWQgYW1vbmcgVVMgYWR1bHRzIGFuZCBvbGRlciBjaGlsZHJlbiBpbiB0aGlzIHN0dWR5LgoKQWZ0ZXIgcm90YXRpb24sIHRoZSBmaXJzdCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMsIGFzIHdlbGwgYXMgc29tZSBwb3NpdGl2ZSBlbW90aW9ucy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgaW5kaWNhdGVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEJPRFkgZmFjdG9yLCBidXQgd2FzIGFsc28gcXVpdGUgc2ltaWxhciB0byBhZHVsdHMnIEhFQVJUIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDNfYWQsIGVmYV9jaCA9IGVmYV93ZG1fZDNfNDYsIGZhY3RvciA9ICJGMSIsIGZhY3Rvcl9uYW1lc19hZCA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM180NiwgNCwgIkYxIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kM180NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAKClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLCBhcyB3ZWxsIGFzIG9uZSBjb21wbGV4IG5lZ2F0aXZlIGVtb3Rpb24gKF9mZWVsIGd1aWx0eV8pLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgTUlORCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfd2RtX2QzX2FkLCBlZmFfY2ggPSBlZmFfd2RtX2QzXzQ2LCBmYWN0b3IgPSAiRjIiLCBmYWN0b3JfbmFtZXNfYWQgPSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKSlgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfNDYsIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDNfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMsIHdpdGggcGFydGljdWxhcmx5IHN0cm9uZyBsb2FkaW5ncyBmb3IgcG9zaXRpdmUgZW1vdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGluZGljYXRlZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBIRUFSVCBmYWN0b3IsIGJ1dCBhbHNvIHF1aXRlIHNpbWlsYXIgdG8gYWR1bHRzJyBCT0RZIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDNfYWQsIGVmYV9jaCA9IGVmYV93ZG1fZDNfNDYsIGZhY3RvciA9ICJGMyIsIGZhY3Rvcl9uYW1lc19hZCA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM180NiwgNCwgIkYzIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kM180NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLiAoU2VlIEZpZ3VyZSA1LCBQYW5lbCBCLCBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4pCgpTZWUgRmlndXJlIDMuMyBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4KCkkgd291bGQgZGVzY3JpYmUgdGhpcyBjb25jZXB0dWFsIHN0cnVjdHVyZSBhcyByZW1pbmlzY2VudCBvZiB0aGUgQk9EWS1IRUFSVC1NSU5EIHN0cnVjdHVyZSBmb3VuZCBhbW9uZyBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBidXQgbm90IGFzIGZ1bGx5ICJhZHVsdC1saWtlLiIgSW4gcGFydGljdWxhciwgaW4gdGhpcyBzdHJ1Y3R1cmUsIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBCT0RZIGFtb25nIG9sZGVyIGNoaWxkcmVuIGFuZCBhZHVsdHMgYXJlIG5vdCBhcyBjbGVhcmx5IGRpZmZlcmVudGlhdGVkIGZyb20gdGhlIGVtb3Rpb25hbCBleHBlcmllbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIEhFQVJULiBJbmRlZWQsIGl0IGl0IG5vdCBjbGVhciB0aGF0IEJPRFkgdnMuIEhFQVJUIGlzIHRoZSBtb3N0IHNhbGllbnQgZGlzdGluY3Rpb24gYW1vbmcgdGhlIGZpcnN0IGFuZCB0aGlyZCBmYWN0b3JzIGluIHRoaXMgc29sdXRpb246IEEgY2xlYW5lciBkZXNjcmlwdGlvbiBvZiB0aGVzZSBmYWN0b3JzIG1pZ2h0IGJlIG5lZ2F0aXZlbHktdmFsZW5jZWQgZXhwZXJpZW5jZXMgdnMuIHBvc2l0aXZlbHktdmFsZW5jZWQgZXhwZXJpZW5jZXMuIAoKYGBge3J9CnBsb3RfZWZhX3dkbV9kM19hZCA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2QzX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZCkgKwogIGxhYnModGl0bGUgPSAiQWR1bHRzIiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90X2VmYV93ZG1fZDNfNzkgPC0gaGVhdG1hcF9mdW4oZWZhX3dkbV9kM183OSwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkpICsKICBsYWJzKHRpdGxlID0gIk9sZGVyIGNoaWxkcmVuLCA3LTl5Iiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90X2VmYV93ZG1fZDNfNDYgPC0gaGVhdG1hcF9mdW4oZWZhX3dkbV9kM180NiwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpICsKICBsYWJzKHRpdGxlID0gIllvdW5nZXIgY2hpbGRyZW4sIDQtNnkiLCBzdWJ0aXRsZSA9ICIzLWZhY3RvciBzb2x1dGlvbiIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCnBsb3RfZWZhX3Bhcl9kM180NiA8LSBoZWF0bWFwX2Z1bihlZmFfcGFyX2QzXzQ2LCBmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NikgKwogIGxhYnModGl0bGUgPSAiWW91bmdlciBjaGlsZHJlbiwgNC02eSIsIHN1YnRpdGxlID0gIjItZmFjdG9yIHNvbHV0aW9uIikKYGBgCgpgYGB7cn0KZmlndXJlMy4zIDwtIHBsb3RfZ3JpZChwbG90X2VmYV93ZG1fZDNfYWQsIHBsb3RfZWZhX3dkbV9kM183OSwKICAgICAgICAgICAgICAgICAgICAgICBwbG90X2VmYV93ZG1fZDNfNDYsIHBsb3RfZWZhX3Bhcl9kM180NiwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSAiQVVUTyIsIG5jb2wgPSA0LCByZWxfd2lkdGhzID0gYygxLCAxLCAxLCAxKSkKCmZpZ3VyZTMuM19jYXAgPC0gYWRkX3N1YihmaWd1cmUzLjMsIHN0cl93cmFwKCJGaWd1cmUgMy4zOiBGYWN0b3IgbG9hZGluZ3MgZnJvbSBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzZXMgb2YgU3R1ZHkgMywgaW4gd2hpY2ggcGFydGljaXBhbnRzIGFzc2Vzc2VkIG9uZSBvZiBuaW5lIGRpdmVyc2UgdGFyZ2V0IGNoYXJhY3RlcnMuIChBKSBSZXN1bHRzIGZvciBVUyBhZHVsdHMuIChCKSBSZXN1bHRzIGZvciBVUyBjaGlsZHJlbiBhZ2VzIDctOXkuIChDKSBSZXN1bHRzIGZvciBVUyBjaGlsZHJlbiBhZ2VzIDQtNnksIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzIChhcyBzdWdnZXN0ZWQgYnkgdGhlIG9yaWdpbmFsIGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEgcmVwb3J0ZWQgaW4gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiAoRCkgUmVzdWx0cyBmb3IgVVMgY2hpbGRyZW4gYWdlcyA0LTZ5LCByZXRhaW5pbmcgdHdvIGZhY3RvcnMgKGFzIHN1Z2dlc3RlZCBwYXJhbGxlbCBhbmFseXNpcykuIEluIHRoaXMgYW5kIGFsbCBmaWd1cmVzIHBvcnRyYXlpbmcgZmFjdG9yIGxvYWRpbmdzLCBmYWN0b3JzIGhhdmUgYmVlbiBwbG90dGVkIGluIHRoZSBzYW1lIG9yZGVyIChCT0RZLCBIRUFSVCwgTUlORCksIHdoZW4gYXBwbGljYWJsZSwgdG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGFjcm9zcyBzdHVkaWVzLiBBIGZhY3RvciBsb2FkaW5nIG9mICsxIGluZGljYXRlcyBhIHBlcmZlY3RseSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtZW50YWwgY2FwYWNpdHkgYW5kIHVuZGVybHlpbmcgY29uc3RydWN0OyBhIGxvYWRpbmcgb2YgLTEgaW5kaWNhdGVzIGEgcGVyZmVjdGx5IG5lZ2F0aXZlIHJlbGF0aW9uc2hpcC4iLCAyMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyIGZpZ3VyZTMuMywgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjZ9CmdnZHJhdyhmaWd1cmUzLjNfY2FwKQpgYGAKCiMjIERpc2N1c3Npb24KClN0dWR5IDMgc3VnZ2VzdHMgdGhhdCB0aGUgdGhyZWUtcGFydCBjb25jZXB0dWFsIHN0cnVjdHVyZeKAlGFuY2hvcmVkIGJ5IEJPRFksIEhFQVJULCBhbmQgTUlOROKAlGlzIHJlbGlhYmxlIGFuZCByb2J1c3QgYW1vbmcgNy0gdG8gOS15ZWFyLW9sZCBVUyBjaGlsZHJlbi4gQXMgd2l0aCBhZHVsdHMgaW4gU3R1ZHkgMSAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLCB0aGUgY2FwYWNpdGllcyB0aGF0ICJoYW5nIHRvZ2V0aGVyIiBpbiBvbGRlciBjaGlsZHJlbidzIHJlYXNvbmluZyB3aGVuIHRhcmdldCBjaGFyYWNhdGVycyBhcmUgcGVyY2VpdmVkIHRvIHZhcnkgaW4gbWVudGFsIGNhcGFjaXR5IHByb2ZpbGVzIGFwcGVhciB0byBiZSBoaWdobHkgc2ltaWxpYXIgdG8gdGhvc2UgdGhhdCAiaGFuZyB0b2dldGhlciIgd2hlbiBwYXJ0aWNpcGFudHMgZGlzYWdyZWUgYWJvdXQgdGhlIG1lbnRhbCBsaXZlcyBvZiBjb250cm92ZXJzaWFsICJlZGdlIGNhc2VzIiBpbiBzb2NpYWwgcmVhc29uaW5nIChTdHVkeSAyKS4KCk1lYW53aGlsZSwgdGhpcyBzdHVkeSBzdWdnZXN0cyB0aGF0IHRoaXMgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgdW5kZXJnb2VzIHN1YnN0YW50aWFsIGNoYW5nZXMgYmV0d2VlbiBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZC4gTGlrZSBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVu4oCZcyByZXNwb25zZXMgd2VyZSBjaGFyYWN0ZXJpemVkIGJ5IHN0cm9uZyBjb3JyZWxhdGlvbnMgYW1vbmcgYSBzdWl0ZSBvZiBwZXJjZXB0dWFsIGFuZCBjb2duaXRpdmUgY2FwYWNpdGllcyB0aGF0IEkgaGF2ZSBsYWJlbGVkIE1JTkQuIFRoaXMgaGlnaGxpZ2h0cyBvbmUgYXNwZWN0IG9mIGNvbmNlcHR1YWwgc3RydWN0dXJlIHRoYXQgc2VlbXMgdG8gYmUgcmVsYXRpdmVseSBzdGFibGUgZnJvbSBlYXJseSBjaGlsZGhvb2Qgb253YXJkLiAKCkhvd2V2ZXIsIGluIGNvbnRyYXN0IHRvIHRoZSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3ZWVuIHBoeXNpb2xvZ2ljYWwgYWJpbGl0aWVzIGFuZCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGF0IGNoYXJhY3Rlcml6ZWQgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBhbW9uZyBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCB5b3VuZ2VyIGNoaWxkcmVu4oCZcyByZXNwb25zZXMgc3VnZ2VzdCB0aGF0IHRoZXkgcGVyY2VpdmVkIHBoeXNpb2xvZ2ljYWwgYW5kIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRvIGJlIG1vcmUgY2xvc2VseSBpbnRlZ3JhdGVkIGFuZCB0aGUgbGluZSBiZXR3ZWVuIHRoZW0gdG8gYmUgbW9yZSBibHVycmVkLgoKYGBge3J9CmVmYV9wYXJfZDNfNDZfaGlnaGxvYWQgPC0gbG9hZGluZ3NfZnVuKGVmYV9wYXJfZDNfNDYsICJsb25nIikgJT4lIAogIGZpbHRlcihsb2FkaW5nID49IDAuNjApICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGxvYWRpbmcpKSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKGFkdWx0X2ZhY3RvciA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCAyMCwgIkYxIiwgInBvcyIpKSA9PSBUIH4gIkJPRFkiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfYWQsIDIwLCAiRjIiLCAicG9zIikpID09IFQgfiAiSEVBUlQiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfYWQsIDIwLCAiRjMiLCAicG9zIikpID09IFQgfiAiTUlORCIsCiAgICBUUlVFIH4gIm5vIGRvbWluYW50IGZhY3RvciIpKSAlPiUKICB1bmdyb3VwKCkKZWZhX3Bhcl9kM180Nl9oaWdobG9hZApgYGAKCk9uZSBpbmRpY2F0aW9uIG9mIHRoaXMgYmx1cnJpbmcgY29tZXMgZnJvbSB0aGUgdHdvLWZhY3RvciBzb2x1dGlvbiBzdWdnZXN0ZWQgYnkgcGFyYWxsZWwgYW5hbHlzaXMsIGluIHdoaWNoIGEgc2luZ2xlIEJPRFktSEVBUlQgZmFjdG9yIGVtZXJnZWQgYW5kIHdhcyBoaWdobHkgY29uZ3J1ZW50IHdpdGggYm90aCB0aGUgQk9EWSAoY29zaW5lIHNpbWlsYXJpdHk6IGByIGNvbmdfZWZhX3Bhcl9kM19hZF80NlsiRjEiLCAiQk9EWSJdYCkgYW5kIEhFQVJUIChgciBjb25nX2VmYV9wYXJfZDNfYWRfNDZbIkYxIiwgIkhFQVJUIl1gKSBmYWN0b3JzIG9mIGFkdWx0cy4gQW1vbmcgdGhlIG1lbnRhbCBjYXBhY2l0aWVzIHRoYXQgbG9hZGVkIHN0cm9uZ2x5ICgkXGdlcSQgMC42MCkgb24gdGhpcyBmYWN0b3Igd2VyZSBib3RoIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAoZS5nLiwgYHIgaXRhbF9ieV9jYXBfZnVuKGVmYV9wYXJfZDNfNDZfaGlnaGxvYWQkY2FwYWNpdHlbZWZhX3Bhcl9kM180Nl9oaWdobG9hZCRhZHVsdF9mYWN0b3I9PSJCT0RZIiAmIGVmYV9wYXJfZDNfNDZfaGlnaGxvYWQkZmFjdG9yID09ICJGMSIgJiBlZmFfcGFyX2QzXzQ2X2hpZ2hsb2FkJGNhcGFjaXR5ICE9ICJnZXQgYW5ncnkiXSlgKSBhbmQgc29jaWFsLWVtb3Rpb25hbCBleHBlcmllbmNlcyAoYHIgaXRhbF9ieV9jYXBfZnVuKGVmYV9wYXJfZDNfNDZfaGlnaGxvYWQkY2FwYWNpdHlbZWZhX3Bhcl9kM180Nl9oaWdobG9hZCRhZHVsdF9mYWN0b3I9PSJIRUFSVCIgJiBlZmFfcGFyX2QzXzQ2X2hpZ2hsb2FkJGZhY3RvciA9PSAiRjEiXSlgKSwgc3VnZ2VzdGluZyB0aGF0IHlvdW5nZXIgY2hpbGRyZW4gcGVyY2VpdmVkIHBoeXNpb2xvZ2ljYWwgYW5kIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRvICJnbyB0b2dldGhlciIgdG8gYSBjb25zaWRlcmFibGUgZGVncmVlLgoKYGBge3J9CmVmYV93ZG1fZDNfNDZfZG9tQ2FwIDwtIGxvYWRpbmdzX2Z1bihlZmFfd2RtX2QzXzQ2LCAibG9uZyIpICU+JSAKICBhcnJhbmdlKGRlc2MobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nKSAlPiUKICBtdXRhdGUoYWR1bHRfZmFjdG9yID0gY2FzZV93aGVuKAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfYWQsIDIwLCAiRjEiLCAicG9zIikpID09IFQgfiAiQk9EWSIsCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM19hZCwgMjAsICJGMiIsICJwb3MiKSkgPT0gVCB+ICJIRUFSVCIsCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM19hZCwgMjAsICJGMyIsICJwb3MiKSkgPT0gVCB+ICJNSU5EIiwKICAgIFRSVUUgfiAibm8gZG9taW5hbnQgZmFjdG9yIikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nKSkKZWZhX3dkbV9kM180Nl9kb21DYXAKYGBgCgpgYGB7cn0KZWZhX3dkbV9kM180Nl9sb3dsb2FkIDwtIGxvYWRpbmdzX2Z1bihlZmFfd2RtX2QzXzQ2LCAibG9uZyIpICU+JSAKICBmaWx0ZXIobG9hZGluZyA8PSAwLjQwKSAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoZmFjdG9yLCBjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKGFkdWx0X2ZhY3RvciA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCAyMCwgIkYxIiwgInBvcyIpKSA9PSBUIH4gIkJPRFkiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfYWQsIDIwLCAiRjIiLCAicG9zIikpID09IFQgfiAiSEVBUlQiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfYWQsIDIwLCAiRjMiLCAicG9zIikpID09IFQgfiAiTUlORCIsCiAgICBUUlVFIH4gIm5vIGRvbWluYW50IGZhY3RvciIpKSAlPiUKICB1bmdyb3VwKCkKZWZhX3dkbV9kM180Nl9sb3dsb2FkCmBgYAoKRXZlbiBpbiB0aGUgMy1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHRoZSBvcmlnaW5hbCBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIHJlcG9ydGVkIGluIFdlaXNtYW4gZXQgYWwuICgyMDE3KSwgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gcGh5c2lvbG9naWNhbCBhbmQgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgd2FzIHNvbWV3aGF0IGJsdXJyZWQuIFdoaWxlIHRoZSBmaXJzdCBmYWN0b3IsIHdoaWNoIEkgaGF2ZSBsYWJlbGVkIEJPRFlcKiwgd2FzIGhpZ2hseSBjb25ncnVlbnQgd2l0aCBhZHVsdHMnIEJPRFkgZmFjdG9yIChjb3NpbmUgc2ltaWxhcml0eTogYHIgY29uZ19lZmFfd2RtX2QzX2FkXzQ2WyJGMSIsICJCT0RZIl1gKSwgaXQgd2FzIGFsc28gdGhlIGRvbWluYW50IGZhY3RvciBmb3IgdHdvIHNvY2lhbC1lbW90aW9uYWwgaXRlbXMgKGByIGl0YWxfYnlfY2FwX2Z1bihlZmFfd2RtX2QzXzQ2X2RvbUNhcCRjYXBhY2l0eVtlZmFfd2RtX2QzXzQ2X2RvbUNhcCRmYWN0b3IgPT0gIkYxIiAmIGVmYV93ZG1fZDNfNDZfZG9tQ2FwJGFkdWx0X2ZhY3RvciA9PSAiSEVBUlQiXSlgKS4gQW5kIHdoaWxlIHRoZSB0aGlyZCBmYWN0b3IsIHdoaWNoIEkgaGF2ZSBsYWJlbGVkIEhFQVJUXCosIHdhcyBoaWdobHkgY29uZ3J1ZW50IHdpdGggYWR1bHRzJyBIRUFSVCBmYWN0b3IgKGNvc2luZSBzaW1pbGFyaXR5OiBgciBjb25nX2VmYV93ZG1fZDNfYWRfNDZbIkYzIiwgIkhFQVJUIl1gKSwgdGhlcmUgd2VyZSBzZXZlcmFsIHNvY2lhbC1lbW90aW9uYWwgaXRlbXMgdGhhdCBmYWlsZWQgdG8gbG9hZCBzdHJvbmdseSBvbiBpdCAobG9hZGluZ3MgJFxsZXEkIDAuNDA6IGByIGl0YWxfYnlfY2FwX2Z1bihlZmFfd2RtX2QzXzQ2X2xvd2xvYWQkY2FwYWNpdHlbZWZhX3dkbV9kM180Nl9sb3dsb2FkJGZhY3RvciA9PSAiRjMiICYgZWZhX3dkbV9kM180Nl9sb3dsb2FkJGFkdWx0X2ZhY3RvciA9PSAiSEVBUlQiXSlgKS4gU3RlcHBpbmcgYmFjaywgaXQgaXMgbm90IGNsZWFyIHRoYXQgInBoeXNpb2xvZ2ljYWwgdnMuIHNvY2lhbC1lbW90aW9uYWwiIGlzIHRoZSBiZXN0IHdheSB0byBjaGFyYWN0ZXJpemUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlc2UgdHdvIGZhY3RvcnMuIEluIGZhY3QsIGdpdmVuIHRoYXQgdGhlIHN0cm9uZ2VzdC1sb2FkaW5nIGl0ZW1zIGZvciBCT0RZXCogd2VyZSBuZWdhdGl2ZWx5IHZhbGVuY2VkIChgciBnc3ViKCJhbmQgIiwgIiIsIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzXzQ2LCAzLCAiRjEiLCAiYWJzIikpYCkgd2hpbGUgdGhlIHN0cm9uZ2VzdC1sb2FkaW5nIGl0ZW1zIGZvciBIRUFSVFwqIHdlcmUgcG9zaXRpdmVseSB2YWxlbmNlZCAoYHIgZ3N1YigiYW5kICIsICIiLCB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM180NiwgMywgIkYzIiwgImFicyIpKWApLCBpdCBzZWVtcyBwbGF1c2libGUgdGhhdCB0aGUgbW9yZSBzYWxpZW50IGRpc3RpbmN0aW9uIGFtb25nIHRoaXMgYWdlIGdyb3VwIG1heSBoYXZlIGJlZW4gcG9zaXRpdmUgdnMuIG5lZ2F0aXZlIHZhbGVuY2UsIHJhdGhlciB0aGFuIEJPRFkgdnMuIEhFQVJULiBUaGUgc2FsaWVuY2Ugb24gbmVnYXRpdmUgdnMuIHBvc2l0aXZlIGV4cGVyaWVuY2VzIGFtb25nIHlvdW5nZXIgY2hpbGRyZW4gaXMgY29uc2lzdGVudCB3aXRoIHJlY2VudCB3b3JrIG9uIHRoZSBkZXZlbG9wbWVudCBvZiBlbW90aW9uIGNvbmNlcHRzLCB3aGljaCBzdWdnZXN0cyB0aGF0IGVtb3Rpb24gcmVwcmVzZW50YXRpb25zIGFyZSBkb21pbmFudGVkIGJ5IGEgc2luZ2xlIGRpbWVuc2lvbiBvZiB2YWxlbmNlIGluIGVhcmx5IHRvIG1pZGRsZSBjaGlsZGhvb2QsIGJlZm9yZSB1bmZvbGRpbmcgaW50byBhIHR3by1kaW1lbnNpb25hbCBzcGFjZSBjaGFyYWN0ZXJpemVkIGJ5IHZhbGVuY2UgYW5kIGFyb3VzYWwgb3ZlciB0aGUgY291cnNlIG9mIGxhdGVyIGNoaWxkaG9vZCBhbmQgYWRvbGVzZW5jZSAoTm9vayBldCBhbC4sIDIwMTcpLgoKRmluYWxseSwgdGhlIHZlcnkgZmFjdCB0aGF0IGRpZmZlcmVudCBhcHByb2FjaGVzIHRvIGZhY3RvciByZXRlbnRpb24geWllbGRlZCBkaWZmZXJlbnQgcmVzdWx0cyBpcyBmdXJ0aGVyIGV2aWRlbmNlIHRoYXQsIGFsdGhvdWdoIHRoZXJlIGlzIHNvbWUgZXZpZGVuY2UgZm9yIGEgbmFzY2VudCBkaXN0aW5jdGlvbiBiZXR3ZWVuIEJPRFkgYW5kIEhFQVJUIGFtb25nIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4sIHRoaXMgZGlzdGluY3Rpb24gd2FzIG5vdCBhcyByb2J1c3QgYXMgaXQgYXBwZWFyZWQgdG8gYmUgYW1vbmcgb2xkZXIgY2hpbGRyZW4gb3IgYWR1bHRzLgoKIyBTdHVkeSA0OiBBIGZvY3VzIG9uIGVhcmx5IGNoaWxkaG9vZCAoNC01eSkKCk9uZSBtYWpvciBsaW1pdGF0aW9uIG9mIFN0dWRpZXMgMi0zIHdhcyB0aGF0IHRoZSBzdHVkeSBwcm90b2NvbCBpbnZvbHZlZCBhIHJhdGhlciBhZHZhbmNlZCBzZXQgb2YgbWVudGFsIHN0YXRlIHZvY2FidWxhcnkgdGVybXMsIGluY2x1ZGluZyBhIHZhcmlldHkgb2YgY29tcGxleCBtZW50YWwgY2FwYWNpdGllcyAoZS5nLiwgZ3VpbHQsIHByaWRlLCBhd2FyZW5lc3MsIGRlcHRoIHBlcmNlcHRpb24pIGFuZCB1c2luZyBzb21ld2hhdCBjb21wbGljYXRlZCBzeW50YXggZm9yIHNvbWUgaXRlbXMgKGUuZy4sIF9zZW5zZSB3aGV0aGVyIHNvbWV0aGluZyBpcyBjbG9zZSBieSBvciBmYXIgYXdheV8sIF9maWd1cmUgb3V0IGhvdyB0byBkbyB0aGluZ3NfKS4gRm9yIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4sIGluIHBhcnRpY3VsYXIsIHNvbWUgb2YgdGhlIG1lbnRhbCBjYXBhY2l0eSBpdGVtcyBtaWdodCBoYXZlIGJlZW4gb3V0c2lkZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIHdvcmRzIHRoZXkgbm9ybWFsbHkgaGVhciBpbiBkaXNjdXNzaW9ucyBvZiBtZW50YWwgc3RhdGVz4oCUbGV0IGFsb25lIHRoZSB3b3JkcyB0aGV5IG5vcm1hbGx5IHVzZSB0aGVtc2VsdmVzLiBJbiBhZGRpdGlvbiwgeW91bmdlciBjaGlsZHJlbiBtYXkgaGF2ZSBmb3VuZCBzb21lIGFzcGVjdHMgb2YgdGhlIGV4cGVyaW1lbnRhbCBwYXJhZGlnbSBkaXN0cmFjdGluZyAoZS5nLiwgYmVpbmcgc2VhdGVkIGluIGZyb250IG9mIHRoZSBleHBlcmltZW50ZXIncyBsYXB0b3AgY29tcHV0ZXIgd2l0aG91dCBiZWluZyBhbGxvd2VkIHRvIHVzZSBpdCB0aGVtc2VsdmVzKSBvciBkaWZmaWN1bHQgKGUuZy4sIHVzaW5nIGEgdGhyZWUtcG9pbnQgc2NhbGUgd2l0aCBtaW5pbWFsIHZpc3VhbCBzY2FmZm9sZGluZzsgc2VlIFNPTSBmb3IgYW4gYW5hbHlzaXMgb2Ygc2NhbGUgdXNlIGFjcm9zcyBhZ2UgZ3JvdXBzKS4KCldpdGggdGhlc2UgY29uc2lkZXJhdGlvbnMgaW4gbWluZCwgaW4gU3R1ZHkgNCBJIGZvY3VzZWQgb24gNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiwgdXNpbmcgYSBzaW1wbGVyIHNldCBvZiBtZW50YWwgY2FwYWNpdGllcyBhbmQgYSBzdHJlYW1saW5lZCB2ZXJzaW9uIG9mIHRoZSBleHBlcmltZW50YWwgcGFyYWRpZ20sIHdpdGggdGhlIGFpbSBvZiBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlIG9mIGNvbmNlcHR1YWwgc3RydWN0dXJlIGFuZCBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIGF0IHRoaXMgZWFybGllciBwb2ludCBpbiBkZXZlbG9wbWVudC4KCkluIFN0dWR5IDQsIGByIG5yb3coZDRfYWRfd2lkZSkvMmAgVVMgYWR1bHRzIGFuZCBgciBucm93KGQ0XzQ2X3dpZGUpLzJgIFVTIGNoaWxkcmVuIGJldHdlZW4gdGhlIGFnZXMgb2YgYHIgc3VtbWFyeShkNF80NiRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpYC1gciBzdW1tYXJ5KGQ0XzQ2JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYHkpIGVhY2ggYXNzZXNzZWQgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIG9uIDE4IG1lbnRhbCBjYXBhY2l0aWVzLiBUbyBtYWtlIHRoZSBzdHVkeSBhcHByb3ByaWF0ZSBmb3IgY2hpbGRyZW4gaW4gdGhpcyBhZ2UgcmFuZ2UsIHRoaXMgc3R1ZHkgZW1wbG95ZWQgYSBuZXcgc2V0IG9mIDE4IG1lbnRhbCBjYXBhY2l0aWVzIChzb21lIGJ1dCBub3QgYWxsIG9mIHdoaWNoIHdlcmUgdXNlZCBpbiBTdHVkaWVzIDEtMykuIEluIGFkZGl0aW9uLCBwYXJ0aWNpcGFudHMgd2VyZSBwcmVzZW50ZWQgd2l0aCBhIG1vcmUgY2hpbGQtZnJpZW5kbHkgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSAzLXBvaW50IHJlc3BvbnNlIHNjYWxlICgibm8sIiBjb2RlZCBhcyAwOyAia2luZGEsIiBjb2RlZCBhcyAwLjUsICJ5ZXMsIiBjb2RlZCBhcyAxKS4gVGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgd2l0aCBwYXJ0aWNpcGFudHMgYXNzZXNzaW5nIGJvdGggYSBiZWV0bGUgb3IgYSByb2JvdCBpbiBzZXF1ZW5jZSAod2l0aCBvcmRlciBjb3VudGVyYmFsYW5jZWQgYWNyb3NzIHBhcnRpY2lwYW50cykuIChTZWUgQ2hhcHRlciBJSSBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgpBcyBicmllZmx5IGRlc2NyaWJlZCBpbiBDaGFwdGVyIElJLCB0aGUgMTggbWVudGFsIGNhcGFjaXRpZXMgZW1wbG95ZWQgaW4gU3R1ZHkgNCB3ZXJlIHNlbGVjdGVkIGZyb20gYSBsYXJnZXIgcGlsb3Qgc3R1ZHkgaW4gd2hpY2ggMy0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiB3ZXJlIGFza2VkIHRvIGNvbXBsZXRlIHN0b3JpZXMgdGhhdCBiZWdhbiB3aXRoIGVhY2ggb2YgdGhlc2UgbWVudGFsIGNhcGFjaXRpZXMgYXMgYSBwcmVtaXNlIChlLmcuLCAiTGV0J3MgaW1hZ2luZSBhIHBlcnNvbiB3aG8gX2xvdmVzIHNvbWVvbmVfLiBXaGF0IGhhcHBlbnMgbmV4dD8iOyAiTm93IGxldCdzIHByZXRlbmQgdGhhdCBzb21lb25lIF9yZW1lbWJlcnMgc29tZXRoaW5nXy4gV2hhdCBoYXBwZW5zIG5leHQ/IikgYW5kIHdlcmUganVkZ2VkIG9uIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdGhlaXIgc3RvcnkgY29tcGxldGlvbi4gCgpBbW9uZyB0aGUgaXRlbXMgdGhhdCBlbWVyZ2VkIGZyb20gdGhpcyBwaWxvdCBzdHVkeSBhcyByZWFzb25hYmxlIGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBTdHVkeSA0LCBJIHNlbGVjdGVkIGl0ZW1zIHRvIHJlcHJlc2VudGVkIHRoZSB0aHJlZSAiY29uY2VwdHVhbCB1bml0cyIgcmV2ZWFsZWQgYnkgU3R1ZGllcyAxLTMgKEJPRFksIEhFQVJULCBhbmQgTUlORCkuIFRoZSBnb2FsIGhlcmUgd2FzIHRvIGNyZWF0ZSBhIGNvbnNlcnZhdGl2ZSB0ZXN0IG9mIGRldmVsb3BtZW50YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB5b3VuZ2VyIGFuZCBvbGRlciBjaGlsZHJlbiBpbiB0aGUgImNvbmNlcHR1YWwgdW5pdHMiIG9ic2VydmVkIGluIFN0dWR5IDMsIGJ5IGNvbnN0cnVjdGluZyBtYXRlcmlhbHMgdGhhdCBzaG91bGQgbWF4aW1pemUgdGhlIGNoYW5jZXMgb2Ygb2JzZXJ2aW5nIHRoZSBzYW1lIChvciBzaW1pbGFyKSBjb25jZXB0dWFsIHVuaXRzIGFtb25nIHlvdW5nIGNoaWxkcmVuIGFzIHdlcmUgb2JzZXJ2ZWQgYW1vbmcgb2xkZXIgY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkaWVzIDEtMy4gSWYgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBmYWN0IGhhdmUgYWNjZXNzIHRvIGNvbmNlcHR1YWwgdW5pdHMgc2ltaWxhciB0byBCT0RZLCBIRUFSVCwgYW5kIE1JTkQsIHRoZSBtZW50YWwgY2FwYWNpdGllcyAoYW5kIGdlbmVyYWxseSBjaGlsZC1mcmllbmQgcHJvdG9jb2wpIG9mIFN0dWR5IDQgc2hvdWxkIHByb3ZpZGUgdGhlIGJlc3QgY2hhbmNlcyBvZiBzdXJmYWNlcyB0aGlzIGNvbmNlcHR1YWwgc3RydWN0dXJlLiBDb252ZXJzZWx5LCBpZiBTdHVkeSA0IHJldmVhbHMgZGlmZmVyZW5jZXMgaW4gY29uY2VwdHVhbCBzdHJ1Y3R1cmUgZGVzcGl0ZSB0aGVzZSBtb2RpZmljYXRpb25zLCBhbmQgZGVzcGl0ZSAic3RhY2tpbmcgdGhlIG9kZHMiIGFnYWluc3QgZGV2ZWxvcG1lbnRhbCBkaWZmZXJlbmNlcyBpbiB0aGUgc2VsY3Rpb24gb2YgbWVudGFsIGNhcGFjaXRpZXMsIHRoaXMgcHJvdmlkZXMgc3Ryb25nZXIgZXZpZGVuY2UgZm9yIGNvbmNlcHR1YWwgY2hhbmdlIGluIHRoZSBudW1iZXIgYW5kL29yIGtpbmQgb2YgY29uY2VwdHVhbCB1bml0cyBhdmFpbGFibGUgdG8gY2hpbGRyZW4gYXQgZGlmZmVyZW50IHBvaW50cyBpbiBkZXZlbG9wbWVudC4KClRoZSBmaW5hbCBzZXQgb2YgQk9EWSBpdGVtcyBpbmNsdWRlZCBfZmVlbCBodW5ncnlfLCBfZ2V0IHRoaXJzdHlfLCBfZmVlbCBzaWNrXywgX2ZlZWwgdGlyZWRfLCBfZ2V0IHNjYXJlZF8sIGFuZCBfc21lbGwgdGhpbmdzXy4gSEVBUlQgaXRlbXMgaW5jbHVkZWQgX2xvdmUgc29tZW9uZV8sIF9oYXRlIHNvbWVvbmVfLCBfZmVlbCBoYXBweV8sIF9nZXQgc2FkXywgX2ZlZWwgc29ycnlfLCBhbmQgX2dldCBsb25lbHlfLiBNSU5EIGl0ZW1zIGluY2x1ZGVkIF9zZWVfLCBfaGVhcl8sIF90aGlua18sIF9yZW1lbWJlciB0aGluZ3NfLCBfa25vdyBzdHVmZl8sIGFuZCBfZmlndXJlIHRoaW5ncyBvdXRfIChzZWUgYWxzbyBUYWJsZSAyLjEgaW4gQ2hhcHRlciBJSSkuIEkgZW5zdXJlZCB0aGF0IGVhY2ggY2F0ZWdvcnkgaW5jbHVkZWQgYSB2YXJpZXR5IG9mIHBocmFzaW5ncyAoZS5nLiwgIl9mZWVsXyBodW5ncnkiIHZzLiAiX2dldF8gdGhpcnN0eSI7ICJyZW1lbWJlciBfdGhpbmdzXyIgdnMuICJrbm93IF9zdHVmZl8iKSBhbmQgdmFsZW5jZXMgd2hlbiBhcHByb3ByaWF0ZSAoZS5nLiwgaGFwcGluZXNzIHZzLiBzYWRuZXNzKTsgd2hlbiBwb3NzaWJsZSwgSSBhaW1lZCB0byBoYXZlIHRoZXNlIGFzcGVjdHMgb2YgcGhyYXNpbmcgdmFyeSBvcnRob2dvbmFsbHkgd2l0aCBjYXRlZ29yaWVzLCBzdWNoIHRoYXQgImdldCIgYW5kICJmZWVsIiBhcHBlYXJlZCByb3VnaGx5IGVxdWFsbHkgb2Z0ZW4gYW1vbmcgdGhlIEJPRFkgYW5kIEhFQVJUIGl0ZW1zLCBhbmQgInRoaW5ncyIgYXBwZWFyZWQgZXF1YWxseSBvZnRlbiBhbW9uZyB0aGUgQk9EWSBhbmQgTUlORCBpdGVtcy4KCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKSW4gU3R1ZHkgNCwgcGFydGljaXBhbnRzIGFzc2Vzc2VkIHR3byB0YXJnZXQgY2hhcmFjYXRlcnMgc2lkZSBieSBzaWRlIChpbiBjb250cmFzdCB0byBTdHVkaWVzIDFhLCAxYiwgMWQsIDIsIGFuZCAzLCBpbiB3aGljaCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIGp1c3Qgb25lIHRhcmdldCBjaGFyYWN0ZXIpLiBJbiB0aGUgY3VycmVudCBhbmFseXNlcywgSSB0cmVhdCBlYWNoIHBhcnRpY2lwYW50J3MgYXNzZXNzbWVudHMgb2YgZWFjaCB0YXJnZXQgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgc2V0IG9mIG9ic2VydmF0aW9ucyAoYXMgaWYgdGhleSBjYW1lIGZyb20gZGlmZmVyZW50IHBhcnRpY2lwYW50cyksIGluIGVmZmVjdCBkb3VibGluZyB0aGUgc2FtcGxlIHNpemUgZm9yIHRoZXNlIHN0dWRpZXMgKGJ1dCBpZ25vcmluZyB0aGUgd2l0aGluLXN1YmplY3QgZGVzaWduKS4gKFtYWCBTRUUgQVBQRU5ESVg/XSBmb3Igc2VwYXJhdGUgRUZBcyBvZiB0aGUgcGFydGljaXBhbnRzJyByZXNwb25zZXMgdG8gdGhlIGZpcnN0IHRhcmdldCBjaGFyYWN0ZXIgdGhhdCB0aGV5IHdlcmUgYXNzaWduZWQgdG8gcmF0ZSB2cy4gdGhlIHNlY29uZCBjaGFyYWN0ZXIuKQoKIyMgUmVzdWx0cwoKIyMjIEFkdWx0cwoKIyMjIyBIb3cgbWFueSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CnJldGVuX3JlcG9ydFsiU3R1ZHkgNDogQWR1bHRzIixdCmBgYAoKYGBge3J9CmVmYV9wYXJfZDRfYWQgPC0gZmFfZnVuKGQ0X2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSA0OiBBZHVsdHMiLCAicGFyIl0pCmVmYV9iaWNfZDRfYWQgPC0gZmFfZnVuKGQ0X2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSA0OiBBZHVsdHMiLCAiYmljIl0pCmVmYV93ZG1fZDRfYWQgPC0gZmFfZnVuKGQ0X2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSA0OiBBZHVsdHMiLCAid2RtIl0pCmBgYAoKQWxsIHRocmVlIHByb3RvY29scyBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgZmFjdG9ycyB0byByZXRhaW4gc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzOyBzZWUgVGFibGUgMy4xLgoKIyMjIyBXaGF0IGFyZSB0aGVzZSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0X2FkIDwtIGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpCmBgYAoKQWZ0ZXIgcm90YXRpb24sIHRoZSBmaXJzdCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIChCT0RZKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfYWQsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKEhFQVJUKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfYWQsIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIChNSU5EKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfYWQsIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gIAoKU2VlIEZpZ3VyZSAzLjQgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuCgpJbiBzdW0sIGFzIGluIFN0dWRpZXMgMS0zLCB0aGUgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgcmV2ZWFsZWQgYnkgdGhpcyBhbmFseXNpcyBhbW9uZyBhZHVsdHMgd2FzIGNoYXJhY3Rlcml6ZWQgYnkgYSB0aHJlZS13YXkgZGlzdGluY3Rpb24gYmV0d2VlbiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgbW9kaWZpZWQgcHJlc2Nob29sZXItZnJpZW5kbHkgcGFyYWRpZ20gd2FzIHZhbGlkOiBVc2luZyBzaW1wbGVyIHZvY2FidWxhcnkgYW5kIGEgd2l0aGluLXN1YmplY3RzIGFwcHJvYWNoIHRvIHRhZ2V0IGNoYXJhY3RlcnMgZWxpY2l0ZWQgdGhlIHNhbWUgaW50dWl0aXZlIG9udG9sb2d5IG9mIG1lbnRhbCBsaWZlLCBhbW9uZyBVUyBhZHVsdHMsIHRoYXQgd2FzIHJldmVhbGVkIGluIFN0dWRpZXMgMS0zLiAKCiMjIyBDaGlsZHJlbiAoNC01eSkKCiMjIyMgSG93IG1hbnkgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpyZXRlbl9yZXBvcnRbIlN0dWR5IDQ6IENoaWxkcmVuIixdCmBgYAoKYGBge3J9CmVmYV9wYXJfZDRfNDYgPC0gZmFfZnVuKGQ0XzQ2X3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSA0OiBDaGlsZHJlbiIsICJwYXIiXSkKZWZhX2JpY19kNF80NiA8LSBmYV9mdW4oZDRfNDZfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDQ6IENoaWxkcmVuIiwgImJpYyJdKQplZmFfd2RtX2Q0XzQ2IDwtIGZhX2Z1bihkNF80Nl93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgNDogQ2hpbGRyZW4iLCAid2RtIl0pCmBgYAoKYGBge3J9CmVmYV9iaWNfZDRfNDYkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV9iaWNfZDRfNDYpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX2JpY19kNF80NikgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpgYGB7cn0KZWZhX3Bhcl9kNF80NiRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX3Bhcl9kNF80NikKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfcGFyX2Q0XzQ2KSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWZhY3RvciksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyfQplZmFfd2RtX2Q0XzQ2JFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfd2RtX2Q0XzQ2KQpsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV93ZG1fZDRfNDYpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKRWFjaCBvZiB0aGUgdGhyZWUgZmFjdG9yIHJldGVudGlvbiBwcm90b2NvbHMgc3VnZ2VzdGVkIGEgZGlmZmVyZW50IG51bWJlciBvZiBmYWN0b3JzIHRvIHJldGFpbjsgc2VlIFRhYmxlIDMuMS4KCkFzIGFtb25nIGNoaWxkcmVuIGluIHRoaXMgYWdlIGdyb3VwIGluIFN0dWR5IDMsIG1pbmltaXppbmcgQklDIHN1Z2dlc3RlZCByZXRhaW5pbmcgYSBzaW5nbGUgZmFjdG9y4oCUaW4gb3RoZXIgd29yZHMsIHN1Z2dlc3RlZCB0aGF0IHRoZXJlIHdhcyBubyBldmlkZW5jZSBmb3IgbW9yZSB0aGFuIG9uZSBsYXRlbnQgY29uc3RydWN0LiAgCgpQYXJhbGxlbCBzdWdnZXN0ZWQgcmV0YWluaW5nIHRocmVlIGZhY3RvcnMuIEVhY2ggb2YgdGhlc2UgZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UsIHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzZXZlcmFsIG1lbnRhbCBjYXBhY2l0aWVzLCBhbmQgaGFkIGF0IGxlYXN0IG1vZGVyYXRlbHkgc3Ryb25nIGZhY3RvciBsb2FkaW5ncyBmb3Igc29tZSBzdWJzZXQgb2YgbWVudGFsIGNhcGFjaXRpZXMuCgpUaGUgcmV0ZW50aW9uIGNyaXRlcmlhIHVzZWQgaW4gV2Vpc21hbiBldCBhbC4gKDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycy4gQWdhaW4sIGVhY2ggb2YgdGhlc2UgZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UsIHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzZXZlcmFsIG1lbnRhbCBjYXBhY2l0aWVzLCBhbmQgaGFkIGF0IGxlYXN0IG1vZGVyYXRlbHkgc3Ryb25nIGZhY3RvciBsb2FkaW5ncyBmb3Igc29tZSBzdWJzZXQgb2YgbWVudGFsIGNhcGFjaXRpZXMuCgpHaXZlbiBhbGwgdGhpcywgSSB3aWxsIHByZXNlbnQgYW5kIGludGVycHJldCBib3RoIDMtIGFuZCA0LWZhY3RvciBzb2x1dGlvbnMgKGJ1dCBzZWUgW1hYIEFQUEVORElYP10gZm9yIHRoZSBudWxsLCAxLWZhY3RvciBzb2x1dGlvbiBzdWdnZXN0ZWQgYnkgbWluaW1pemluZyBCSUMpLgoKIyMjIyBXaGF0IGFyZSB0aGVzZSBjb25jZXB0dWFsIHVuaXRzPwoKIyMjIyMgMy1mYWN0b3Igc29sdXRpb24KCmBgYHtyfQpjb25nX2VmYV9wYXJfZDRfYWRfNDYgPC0gY29uZ190YWJsZV9mdW4oZWZhX2FkID0gZWZhX3dkbV9kNF9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9jaCA9IGVmYV9wYXJfZDRfNDYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZCkKY29uZ19lZmFfcGFyX2Q0X2FkXzQ2CmBgYAoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfcGFyX2Q0XzQ2IDwtIGMoIkJPRFkiLCAiTUlORCIsICJIRUFSVCIpCmBgYAoKRmlyc3QsIEkgd2lsbCBleGFtaW5lIHRoZSAzLWZhY3RvciBzb2x1dGlvbiBzdWdnZXN0ZWQgYnkgcGFyYWxsZWwgYW5hbHlzaXMuICBJbXBvcnRhbnRseSwgdGhpcyBpcyBhbHNvIHRoZSBudW1iZXIgb2YgZmFjdG9ycyByZXRhaW5lZCBhbW9uZyBVUyBhZHVsdHMgYW5kIG9sZGVyIGNoaWxkcmVuIGluIHRoaXMgc3R1ZHkuCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgaW5kaWNhdGVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEJPRFkgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3Bhcl9kNF9hZCwgZWZhX2NoID0gZWZhX3Bhcl9kNF80NiwgZmFjdG9yID0gIkYxIiwgZmFjdG9yX25hbWVzX2FkID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0XzQ2LCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfcGFyX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0d28tZmFjdG9yIHNvbHV0aW9uLiAKClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgTUlORCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfcGFyX2Q0X2FkLCBlZmFfY2ggPSBlZmFfcGFyX2Q0XzQ2LCBmYWN0b3IgPSAiRjIiLCBmYWN0b3JfbmFtZXNfYWQgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZClgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDRfNDYsIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV9wYXJfZDRfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4KClRoZSB0aGlyZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgY29uZmlybWVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEhFQVJUIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV9wYXJfZDRfYWQsIGVmYV9jaCA9IGVmYV9wYXJfZDRfNDYsIGZhY3RvciA9ICJGMyIsIGZhY3Rvcl9uYW1lc19hZCA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0X2FkKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3Bhcl9kNF80NiwgNCwgIkYzIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3Bhcl9kNF80NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLgoKU2VlIEZpZ3VyZSAzLjQgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuCgpJIHdvdWxkIGRlc2NyaWJlIHRoaXMgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgYXMgc3Ryb25nbHkgcmVtaW5pc2NlbnQgb2YgdGhlIEJPRFktSEVBUlQtTUlORCBzdHJ1Y3R1cmUgZm91bmQgYW1vbmcgb2xkZXIgY2hpbGRyZW4gYW5kIGFkdWx0cy4gCgpfX0NIRUNLIEJBQ0sgV0lUSCBNT1JFIERBVEEhX18KCiMjIyMjIDQtZmFjdG9yIHNvbHV0aW9uCgpgYGB7cn0KY29uZ19lZmFfd2RtX2Q0X2FkXzQ2IDwtIGNvbmdfdGFibGVfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDRfYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2ggPSBlZmFfd2RtX2Q0XzQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpCmNvbmdfZWZhX3dkbV9kNF9hZF80NgpgYGAKCmBgYHtyfQpmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF80NiA8LSBjKCJNSU5EKiIsICJCT0RZIChuYXVzZWEpIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFkgKG90aGVyKSIsICJIRUFSVCoiKQpgYGAKCkkgd2lsbCBub3cgdHVybiB0byB0aGUgNC1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHRoZSBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIGVtcGxveWVkIGluIHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbiBvZiBTdHVkeSAxIChXZWlzbWFuIGV0IGFsLidzLCAyMDE3KS4KCkFmdGVyIHJvdGF0aW9uLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLCBhcyB3ZWxsIGFzIHNvbWUgcG9zaXRpdmUgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKGUuZy4sIF9sb3ZlIHNvbWVvbmVfLCBfZmVlbCBoYXBweV8pLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBpbmRpY2F0ZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgTUlORCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfd2RtX2Q0X2FkLCBlZmFfY2ggPSBlZmFfd2RtX2Q0XzQ2LCBmYWN0b3IgPSAiRjEiLCBmYWN0b3JfbmFtZXNfYWQgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZClgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfNDYsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDRfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbi4gCgpUaGUgc2Vjb25kIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucywgd2l0aCBhbiBleGNlcHRpb25hbGwgc3Ryb25nIGZhY3RvciBsb2FkaW5nIGZvciBfZmVlbCBzaWNrXy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgY29uZmlybWVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEJPRFkgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3dkbV9kNF9hZCwgZWZhX2NoID0gZWZhX3dkbV9kNF80NiwgZmFjdG9yID0gIkYyIiwgZmFjdG9yX25hbWVzX2FkID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2Q0XzQ2LCA0LCAiRjIiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uIAoKVGhlIHRoaXJkIGZhY3RvciBhbHNvIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGh5aW9sb2dpY2FsIHNlbnNhdGlvbnMsIGFzIHdlbGwgYXMgc29tZSBwZXJjZXB0dWFsIGFiaWx0aWVzIChlLmcuLCBfaGVhcl8sIF9zZWVfKS4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgaW5kaWNhdGVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEJPRFkgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3dkbV9kNF9hZCwgZWZhX2NoID0gZWZhX3dkbV9kNF80NiwgZmFjdG9yID0gIkYzIiwgZmFjdG9yX25hbWVzX2FkID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2Q0XzQ2LCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24uIChTZWUgRmlndXJlIDUsIFBhbmVsIEIsIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLikKClRoZSBmb3VydGggZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMsIHBhcnRpY3VsYXJseSBuZWdhdGl2ZSBlbW90aW9ucy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgaW5kaWNhdGVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEhFQVJUIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDRfYWQsIGVmYV9jaCA9IGVmYV93ZG1fZDRfNDYsIGZhY3RvciA9ICJGNCIsIGZhY3Rvcl9uYW1lc19hZCA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0X2FkKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kNF80NiwgNCwgIkY0IiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kNF80NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGNCJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLgoKU2VlIEZpZ3VyZSAzLjQgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuCgpJIHdvdWxkIHN1bW1hcml6ZSB0aGUgZm91ci1mYWN0b3Igc29sdXRpb24gYXMgYSB2YXJpYW50IG9uIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb25zIGNvbW1vbiB0byBTdHVkaWVzIDFhLTFkIChhbmQgc3VyZmFjZWQgYnkgdGhlIG90aGVyIHR3byBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scyBmb3IgdGhpcyBzdHVkeSksIGFnYWluIGNoYXJhY3Rlcml6ZWQgYnkgZGlzdGluY3QgY29uc3RydWN0cyBvZiBIRUFSVCBhbmQgTUlORCBidXQgZGVtb25zdHJhdGluZyBhIGZ1cnRoZXIgZGlmZmVyZW50aW9uIG9mIHdoYXQgSSd2ZSByZWZlcnJlZCB0byBhcyBCT0RZIGludG8gc3ViLWNhdGVnb3JpZXMgdGhhdCBhcmUgbm90IGVhc3kgdG8gbGFiZWwgb3IgZGVzY3JpYmUuCgpfX0NIRUNLIEJBQ0sgV0lUSCBNT1JFIERBVEEhX18KCgpgYGB7cn0KcGxvdF9lZmFfd2RtX2Q0X2FkIDwtIGhlYXRtYXBfZnVuKGVmYV93ZG1fZDRfYWQsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0X2FkKSArCiAgbGFicyh0aXRsZSA9ICJBZHVsdHMiLCBzdWJ0aXRsZSA9ICIzLWZhY3RvciBzb2x1dGlvbiIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCnBsb3RfZWZhX3Bhcl9kNF80NiA8LSBoZWF0bWFwX2Z1bihlZmFfcGFyX2Q0XzQ2LCBmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kNF80NikgKwogIGxhYnModGl0bGUgPSAiWW91bmdlciBjaGlsZHJlbiwgNC02eSIsIHN1YnRpdGxlID0gIjMtZmFjdG9yIHNvbHV0aW9uIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGxvdF9lZmFfd2RtX2Q0XzQ2IDwtIGhlYXRtYXBfZnVuKGVmYV93ZG1fZDRfNDYsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2KSArCiAgbGFicyh0aXRsZSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5Iiwgc3VidGl0bGUgPSAiNC1mYWN0b3Igc29sdXRpb24iKQpgYGAKCmBgYHtyfQpmaWd1cmUzLjQgPC0gcGxvdF9ncmlkKHBsb3RfZWZhX3dkbV9kNF9hZCwgcGxvdF9lZmFfcGFyX2Q0XzQ2LAogICAgICAgICAgICAgICAgICAgICAgIHBsb3RfZWZhX3dkbV9kNF80NiwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSAiQVVUTyIsIG5jb2wgPSAzLCByZWxfd2lkdGhzID0gYygxLCAxLCAxLjQpKQoKZmlndXJlMy40X2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTMuNCwgc3RyX3dyYXAoIkZpZ3VyZSAzLjQ6IEZhY3RvciBsb2FkaW5ncyBmcm9tIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNlcyBvZiBTdHVkeSA0LCBpbiB3aGljaCBwYXJ0aWNpcGFudHMgYXNzZXNzZWQgdHdvICdlZGdlIGNhc2UnIHRhcmdldCBjaGFyYWN0ZXJzIChhIGJlZXRsZSBhbmQgYSByb2JvdCksIG9uZSBhZnRlciBhbm90aGVyICh3aXRoIG9yZGVyIGNvdW50ZXJiYWxhbmNlZCBhY3Jvc3MgcGFydGljaXBhbnRzKS4gKEEpIFJlc3VsdHMgZm9yIFVTIGFkdWx0cy4gKEIpIFJlc3VsdHMgZm9yIFVTIGNoaWxkcmVuIGFnZXMgNC01eSwgcmV0YWluaW5nIHRocmVlIGZhY3RvcnMgKGFzIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcykuIChDKSBSZXN1bHRzIGZvciBVUyBjaGlsZHJlbiBhZ2VzIDQtNXksIHJldGFpbmluZyBmb3VyIGZhY3RvcnMgKGFzIHN1Z2dlc3RlZCBieSB0aGUgb3JpZ2luYWwgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSByZXBvcnRlZCBpbiBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEluIHRoaXMgYW5kIGFsbCBmaWd1cmVzIHBvcnRyYXlpbmcgZmFjdG9yIGxvYWRpbmdzLCBmYWN0b3JzIGhhdmUgYmVlbiBwbG90dGVkIGluIHRoZSBzYW1lIG9yZGVyIChCT0RZLCBIRUFSVCwgTUlORCksIHdoZW4gYXBwbGljYWJsZSwgdG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGFjcm9zcyBzdHVkaWVzLiBBIGZhY3RvciBsb2FkaW5nIG9mICsxIGluZGljYXRlcyBhIHBlcmZlY3RseSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtZW50YWwgY2FwYWNpdHkgYW5kIHVuZGVybHlpbmcgY29uc3RydWN0OyBhIGxvYWRpbmcgb2YgLTEgaW5kaWNhdGVzIGEgcGVyZmVjdGx5IG5lZ2F0aXZlIHJlbGF0aW9uc2hpcC4iLCAyMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyIGZpZ3VyZTMuNCwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjZ9CmdnZHJhdyhmaWd1cmUzLjRfY2FwKQpgYGAKCmBgYHtyfQpjb25nX3JlcG9ydCA8LSBiaW5kX3Jvd3MoY29uZ19lZmFfd2RtX2QyX2FkXzc5ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9yb3duYW1lcygpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUob3JkZXIgPSAxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5ID0gIlN0dWR5IDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjctOXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb24gPSAiMy1mYWN0b3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hfZmFjdG9yID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfNzkpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uZ19lZmFfd2RtX2QzX2FkXzc5ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9yb3duYW1lcygpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUob3JkZXIgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5ID0gIlN0dWR5IDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjctOXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb24gPSAiMy1mYWN0b3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hfZmFjdG9yID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uZ19lZmFfd2RtX2QzX2FkXzQ2ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9yb3duYW1lcygpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUob3JkZXIgPSAzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5ID0gIlN0dWR5IDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjQtNnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb24gPSAiMy1mYWN0b3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hfZmFjdG9yID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uZ19lZmFfcGFyX2QzX2FkXzQ2ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9yb3duYW1lcygpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUob3JkZXIgPSA0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5ID0gIlN0dWR5IDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjQtNnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb24gPSAiMi1mYWN0b3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hfZmFjdG9yID0gZmFjdG9yX25hbWVzX2VmYV9wYXJfZDNfNDYpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uZ19lZmFfcGFyX2Q0X2FkXzQ2ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9yb3duYW1lcygpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUob3JkZXIgPSA1LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5ID0gIlN0dWR5IDQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjQtNXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb24gPSAiMy1mYWN0b3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hfZmFjdG9yID0gZmFjdG9yX25hbWVzX2VmYV9wYXJfZDRfNDYpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uZ19lZmFfd2RtX2Q0X2FkXzQ2ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9yb3duYW1lcygpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUob3JkZXIgPSA2LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5ID0gIlN0dWR5IDQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjQtNXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb24gPSAiNC1mYWN0b3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hfZmFjdG9yID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfNDYpKSAlPiUKICBhcnJhbmdlKG9yZGVyLCBjaF9mYWN0b3IpICU+JQogIHNlbGVjdChzdHVkeSwgYWdlX2dyb3VwLCBzb2x1dGlvbiwgY2hfZmFjdG9yLCBCT0RZLCBIRUFSVCwgTUlORCkKY29uZ19yZXBvcnQKYGBgCgpgYGB7cn0KdGFibGUzLjIgPC0gY29uZ19yZXBvcnQgJT4lCiAgc2VsZWN0KC1jKHN0dWR5LCBhZ2VfZ3JvdXAsIHNvbHV0aW9uKSkgJT4lCiAgbXV0YXRlKGNoX2ZhY3RvciA9IGdzdWIoIkYiLCAiRmFjdG9yICIsIGNoX2ZhY3RvcikpICU+JQogIHJlbmFtZSgjYEFnZSBncm91cGAgPSBhZ2VfZ3JvdXAsCiAgICAgICAgIGBDaGlsZHJlbidzIGZhY3RvcmAgPSBjaF9mYWN0b3IpICU+JQogIG11dGF0ZV9hdCh2YXJzKEJPRFksIEhFQVJULCBNSU5EKSwKICAgICAgICAgICAgZnVucyhmb3JtYXQoLiwgbnNtYWxsID0gMikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhCT0RZLCBIRUFSVCwgTUlORCksCiAgICAgICAgICAgIGZ1bnMoY2VsbF9zcGVjKC4sICJodG1sIiwgYm9sZCA9IGlmZWxzZSguID49IDAuNzUsIFQsIEYpKSkpICU+JQogIGthYmxlKGZvcm1hdCA9ICJodG1sIiwgZXNjYXBlID0gRiwgCiAgICAgICAgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgMykpLAogICAgICAgIGNhcHRpb24gPSAiVGFibGUgMy4yOiBGYWN0b3IgY29uZ3J1ZW5jZSAoYXMgaW5kZXhlZCBieSBjb3NpbmUgc2ltaWxhcml0eSkgYmV0d2VlbiBjaGlsZHJlbidzIGFuZCBhZHVsdHMnIGZhY3RvcnMgZnJvbSB0aGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9uIGZvciB0aGUgY29ycmVzcG9uZGluZyBzdHVkeSAoQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGNvbHVtbnMpLiBSZXN1bHRzIGFyZSBncm91cGVkIGJ5IHN0dWR5IGFuZCBhZ2UgZ3JvdXAuIENvc2luZSBzaW1pbGFyaXRpZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuNzUgYXJlIG1hcmtlZCBpbiBib2xkLiIpICU+JSAgCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDIsIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAxLCAzKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSAzLCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIiwgNCwgNikgJT4lCiAgZ3JvdXBfcm93cygiU3R1ZHkgMywgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiAoMy1mYWN0b3Igc29sdXRpb24pIiwgNywgOSkgJT4lCiAgZ3JvdXBfcm93cygiU3R1ZHkgMywgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiAoMi1mYWN0b3Igc29sdXRpb24pIiwgMTAsIDExKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSA0LCA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuICgzLWZhY3RvciBzb2x1dGlvbikiLCAxMiwgMTQpICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDQsIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gKDQtZmFjdG9yIHNvbHV0aW9uKSIsIDE1LCAxOCkKICAKICAjIGNvbGxhcHNlX3Jvd3MoY29sdW1ucyA9IDE6MiwgdmFsaWduID0gInRvcCIpICU+JQogICAgICAgICAgICAgICAgIyBsYXRleF9obGluZSA9ICJjdXN0b20iLCBjdXN0b21fbGF0ZXhfaGxpbmUgPSAxKQpgYGAKCmBgYHtyIHRhYmxlMy4yLCBpbmNsdWRlID0gVCwgcmVzdWx0cyA9ICJhc2lzIn0KdGFibGUzLjIKYGBgCgpgYGB7cn0KdmV4cF9yZXBvcnQgPC0gYmluZF9yb3dzKAogICMgc3R1ZHkgMQogIHZhY19mdW4oZWZhX3dkbV9kMWFfYWQsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYV9hZCkgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAxLCBzdHVkeSA9ICJTdHVkeSAxYSIsCiAgICAgICAgICAgc2FtcGxlID0gIjFhIiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV93ZG1fZDFiX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWJfYWQpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMSwgc3R1ZHkgPSAiU3R1ZHkgMWIiLAogICAgICAgICAgIHNhbXBsZSA9ICIxYiIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfd2RtX2QxY19hZCwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFjX2FkKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDEsIHN0dWR5ID0gIlN0dWR5IDFjIiwKICAgICAgICAgICBzYW1wbGUgPSAiMWMiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3dkbV9kMWRfYWQsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxZF9hZCkgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAxLCBzdHVkeSA9ICJTdHVkeSAxZCIsCiAgICAgICAgICAgc2FtcGxlID0gIjFkIiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICAjIHN0dWR5IDIKICB2YWNfZnVuKGVmYV93ZG1fZDJfYWQsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyX2FkKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDEsIHN0dWR5ID0gIlN0dWR5IDIiLAogICAgICAgICAgIHNhbXBsZSA9ICJhZHVsdHMiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3Bhcl9kMl9hZCwgZmFjdG9yX25hbWVzX2VmYV9wYXJfZDJfYWQpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMiwgc3R1ZHkgPSAiU3R1ZHkgMiIsCiAgICAgICAgICAgc2FtcGxlID0gImFkdWx0cyIsIHNvbHV0aW9uID0gIjQtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfd2RtX2QyXzc5LCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl83OSkgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAzLCBzdHVkeSA9ICJTdHVkeSAyIiwKICAgICAgICAgICBzYW1wbGUgPSAiNy05eSIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgIyBzdHVkeSAzCiAgdmFjX2Z1bihlZmFfd2RtX2QzX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZCkgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAxLCBzdHVkeSA9ICJTdHVkeSAzIiwKICAgICAgICAgICBzYW1wbGUgPSAiYWR1bHRzIiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV93ZG1fZDNfNzksIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzc5KSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDMsIHN0dWR5ID0gIlN0dWR5IDMiLAogICAgICAgICAgIHNhbXBsZSA9ICI3LTl5Iiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV93ZG1fZDNfNDYsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzQ2KSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDUsIHN0dWR5ID0gIlN0dWR5IDMiLAogICAgICAgICAgIHNhbXBsZSA9ICI0LTZ5Iiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV9wYXJfZDNfNDYsIGZhY3Rvcl9uYW1lc19lZmFfcGFyX2QzXzQ2KSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDQsIHN0dWR5ID0gIlN0dWR5IDMiLAogICAgICAgICAgIHNhbXBsZSA9ICI0LTZ5Iiwgc29sdXRpb24gPSAiMi1mYWN0b3IiKSwKICAjIHN0dWR5IDQKICB2YWNfZnVuKGVmYV93ZG1fZDRfYWQsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0X2FkKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDEsIHN0dWR5ID0gIlN0dWR5IDQiLAogICAgICAgICAgIHNhbXBsZSA9ICJhZHVsdHMiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3Bhcl9kNF80NiwgZmFjdG9yX25hbWVzX2VmYV9wYXJfZDRfNDYpICU+JQogICAgbXV0YXRlKG9yZGVyID0gNSwgc3R1ZHkgPSAiU3R1ZHkgNCIsCiAgICAgICAgICAgc2FtcGxlID0gIjQtNXkiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3dkbV9kNF80NiwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfNDYpICU+JQogICAgbXV0YXRlKG9yZGVyID0gNiwgc3R1ZHkgPSAiU3R1ZHkgNCIsCiAgICAgICAgICAgc2FtcGxlID0gIjQtNXkiLCBzb2x1dGlvbiA9ICI0LWZhY3RvciIpKSAlPiUKICAjIGFsbCBzdHVkaWVzCiAgbXV0YXRlKHVyX2ZhY3RvciA9IGNhc2Vfd2hlbihmYWN0b3IgPT0gIkJPRFktSEVBUlQiIH4gIkJPRFktSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIkJPRFkiLCBmYWN0b3IpIH4gIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIkhFQVJUIiwgZmFjdG9yKSB+ICJIRUFSVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiTUlORCIsIGZhY3RvcikgfiAiTUlORCIpLAogICAgICAgICB1cl9mYWN0b3IgPSBmYWN0b3IodXJfZmFjdG9yLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkJPRFkiLCAiQk9EWS1IRUFSVCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEVBUlQiLCAiTUlORCIpKSwKICAgICAgICAgdXJfZmFjdG9yX3BvcyA9IHJlY29kZSh1cl9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFkiID0gMSwgIkJPRFktSEVBUlQiID0gMS41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIRUFSVCIgPSAyLCAiTUlORCIgPSAzKSwKICAgICAgICAgYWdlX2dyb3VwID0gY2FzZV93aGVuKAogICAgICAgICAgIHNhbXBsZSAlaW4lIGMoImFkdWx0cyIsICIxYSIsICIxYiIsICIxYyIsICIxZCIpIH4gIkFkdWx0cyIsCiAgICAgICAgICAgc2FtcGxlID09ICI3LTl5IiB+ICJDaGlsZHJlbiwgNy05eSIsCiAgICAgICAgICAgc2FtcGxlICVpbiUgYygiNC02eSIsICI0LTV5IikgfiAiQ2hpbGRyZW4sIDQtNnkiKSwKICAgICAgICAgYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsICJDaGlsZHJlbiwgNy05eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGlsZHJlbiwgNC02eSIpKSkKYGBgCgpgYGB7cn0KcG9zIDwtIHBvc2l0aW9uX2ppdHRlcih3aWR0aCA9IDAuMSwgc2VlZCA9IDIpCgpmaWd1cmUzLjUgPC0gdmV4cF9yZXBvcnQgJT4lCiAgbXV0YXRlKHNvbHV0aW9uID0gcGFzdGUwKHNvbHV0aW9uLCAiIHNvbHV0aW9uIiksCiAgICAgICAgIGxhYiA9IGNhc2Vfd2hlbigKICAgICAgICAgICAoc29sdXRpb24gPT0gIjQtZmFjdG9yIHNvbHV0aW9uIikgJiAKICAgICAgICAgICAgICgoc3R1ZHkgPT0gIlN0dWR5IDIiICYgdXJfZmFjdG9yID09ICJNSU5EIikgfCAKICAgICAgICAgICAgICAgIChzdHVkeSA9PSAiU3R1ZHkgNCIgJiB1cl9mYWN0b3IgPT0gIkJPRFkiKSkgfiAKICAgICAgICAgICAgIGZhY3RvciwKICAgICAgICAgICB1cl9mYWN0b3IgPT0gIkJPRFktSEVBUlQiIH4gZmFjdG9yLAogICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSkgJT4lCiAgYXJyYW5nZShzdHVkeSwgc2FtcGxlLCB1cl9mYWN0b3IsIGZhY3RvcikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdXJfZmFjdG9yX3BvcywgeSA9IHZhbHVlLCBjb2xvciA9IHN0dWR5KSkgKwogIGZhY2V0X2dyaWQoc29sdXRpb24gfiBhZ2VfZ3JvdXAsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgZ2VvbV9obGluZShkYXRhID0gZGF0YS5mcmFtZShzb2x1dGlvbiA9IGMoIjItZmFjdG9yIHNvbHV0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMy1mYWN0b3Igc29sdXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0LWZhY3RvciBzb2x1dGlvbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBjKDEvMiwgMS8zLCAxLzQpKSwKICAgICAgICAgICAgIGFlcyh4ID0gTlVMTCwgeSA9IE5VTEwsIGNvbG9yID0gTlVMTCwgeWludGVyY2VwdCA9IGVxdWFsKSwKICAgICAgICAgICAgIHNpemUgPSAwLjI1LCBsdHkgPSAyLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BhdGgoYWVzKGdyb3VwID0gc3R1ZHkpLCBwb3NpdGlvbiA9IHBvcywgYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3MsIHNob3cubGVnZW5kID0gVCkgKwogIGdlb21fdGV4dF9yZXBlbChhZXMobGFiZWwgPSBsYWIpLCBzaXplID0gMywgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvcywgYm94LnBhZGRpbmcgPSAwLjM1LCBuYS5ybSA9IFQsCiAgICAgICAgICAgICAgICAgIHNlZ21lbnQuYWxwaGEgPSAwLjUpICsKICBzY2FsZV9jb2xvdXJfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBkaXJlY3Rpb24gPSAtMSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSAxOjMsIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpLAogICAgICAgICAgICAgICAgICAgICBtaW5vcl9icmVha3MgPSBOVUxMKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjEpLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJTaXplIG9mIGZhY3RvcnMgYWNyb3NzIHN0dWRpZXMsIGFnZSBncm91cHMsIGFuZCBFRkEgc29sdXRpb25zIiwKICAgICAgIHggPSAiRmFjdG9yIiwgeSA9ICJTaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkIiwgY29sb3IgPSAiU3R1ZHkiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKQoKZmlndXJlMy41X2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTMuNSwgc3RyX3dyYXAoIkZpZ3VyZSAzLjU6IFNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgYnkgYWxsIGZhY3RvcnMgYWNyb3NzIGFsbCBhZ2UgZ3JvdXBzIGZvciBhbGwgc3R1ZGllcywgZm9yIGVhY2ggb2YgdGhlIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyAoRUZBKSBzb2x1dGlvbnMgaW50ZXJwcmV0ZWQgaW4gdGhlIG1haW4gdGV4dC4gQnkgZGVmaW5pdGlvbiwgdGhlIHRvdGFsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgZm9yIGVhY2ggc29sdXRpb24gZXF1YWxzIDEwMCUuIFRoZSByZWxhdGl2ZSBwZXJjZW50IG9mIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgd2l0aGluIGEgc2luZ2xlIEVGQSBzb2x1dGlvbiBwcm92aWRlcyBvbmUgd2F5IG9mIGFzc2Vzc2luZyB0aGUgcmVsYXRpdmUgJ3NpemUnIG9mIGVhY2ggb2YgdGhlIGZhY3RvcnMgaW4gdGhhdCBzb2x1dGlvbi4gRG90dGVkIGxpbmVzIGluZGljYXRlIHRoZSBleHBlY3RlZCB2YWx1ZSBvZiBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkIGlmIGFsbCBvZiB0aGUgZmFjdG9ycyBmb3IgYSBnaXZlbiBzb2x1dGlvbiB3ZXJlIG9mIGVxdWFsIHNpemUuIiwgNjApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyIGZpZ3VyZTMuNSwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjJ9CmdnZHJhdyhmaWd1cmUzLjVfY2FwKQpgYGAKCiMjIERpc2N1c3Npb24KClN0dWR5IDQgcHJvdmlkZXMgZnVydGhlciBldmlkZW5jZSB0aGF0IHRoZSBjb25jZXB0dWFsIHN0cnVjdHVyZSB1bmRlcmx5aW5nIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgdW5kZXJnb2VzIHN1YnN0YW50aWFsIGNoYW5nZXMgYmV0d2VlbiBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZC4gVXNpbmcgYSBwYXJhZGlnbSB0aGF0IHdhcyBiZXR0ZXIgdGFpbG9yZWQgZm9yIHRoaXMgYWdlIGdyb3VwIGFuZCB0aGF0IGZlYXR1cmVkIHZvY2FidWxhcnkgaXRlbXMgZXhwcmVzc2x5IGRlc2lnbmVkIHRvIHBpY2sgb3V0IChhZHVsdCkgbm90aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgaW4gYSBiYWxhbmNlZCB3YXkgKDYgaXRlbXMgcGVyIGZhY3RvciksIFN0dWR5IDQgZGlkIHByb3ZpZGUgc29tZSBpbmRpY2F0aW9ucyB0aGF0IHRoaXMgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgbWF5IGJlIG1vcmUgbWF0dXJlIGluIHRoZSBlYXJseSBwcmVzY2hvb2wgeWVhcnMgdGhhbiBTdHVkeSAyIHdvdWxkIHN1Z2dlc3QuIEhvd2V2ZXIsIGV2ZW4gaW4gdGhpcyBtb2RpZmllZCBwYXJhZGlnbSwgdGVocmUgYXJlIHNldmVyYWwgaW5kaWNhdGlvbnMgdGhhdCB0aGlzIHRocmVlLXBhcnQgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgaXMgbm90IGZ1bGx5IGluIHBsYWNlIGJ5IDQtNXkuCgpgYGB7cn0KZWZhX3Bhcl9kNF80Nl9tb2Rsb2FkIDwtIGxvYWRpbmdzX2Z1bihlZmFfcGFyX2Q0XzQ2LCAibG9uZyIpICU+JSAKICBmaWx0ZXIobG9hZGluZyA+PSAwLjMwKSAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIG11dGF0ZShhZHVsdF9mYWN0b3IgPSBjYXNlX3doZW4oCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3Bhcl9kNF9hZCwgMTgsICJGMSIsICJwb3MiKSkgPT0gVCB+ICJCT0RZIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0X2FkLCAxOCwgIkYyIiwgInBvcyIpKSA9PSBUIH4gIkhFQVJUIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0X2FkLCAxOCwgIkYzIiwgInBvcyIpKSA9PSBUIH4gIk1JTkQiLAogICAgVFJVRSB+ICJubyBkb21pbmFudCBmYWN0b3IiKSkgJT4lCiAgdW5ncm91cCgpCmVmYV9wYXJfZDRfNDZfbW9kbG9hZApgYGAKCkZpcnN0LCB0aGUgc2ltaWxhcml0aWVzLiBBcyB3aXRoIHRoZSA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuIFN0dWR5IDMsIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW7igJlzIHJlc3BvbnNlcyBpbiBTdHVkeSA0IHdlcmUgY2hhcmFjdGVyaXplZCBieSBzdHJvbmcgY29ycmVsYXRpb25zIGFtb25nIGEgc3VpdGUgb2YgcGVyY2VwdHVhbCBhbmQgKHBhcnRpY3VsYXJseSkgY29nbml0aXZlIGNhcGFjaXRpZXMgdGhhdCBJIGhhdmUgbGFiZWxlZCBNSU5ELiBUaGlzIHN1aXRlIG9mIE1JTkQgYWJpbGl0aWVzIHdhcyByb2J1c3QgdG8gYW5hbHlzaXMgY2hvaWNlcyBhbmQgZW1lcmdlZCBjbGVhcmx5IGluIGJvdGggU3R1ZGllcyAyIGFuZCAzLCBib2xzdGVyaW5nIG15IGVhcmxpZXIgY2xhaW0gdGhhdCB0aGlzIGlzIG9uZSBhc3BlY3Qgb2YgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgdGhhdCBtYXkgYmUgcmVsYXRpdmVseSBzdGFibGUgZnJvbSBlYXJseSBpbiBjaGlsZGhvb2QuIAoKTW9yZSBicm9hZGx5LCB0aGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9uIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcyBpbmNsdWRlcyByZWNvZ25pemFibGUgQk9EWSBhbmQgTUlORCBmYWN0b3JzIGFzIHdlbGwgYXMgYSBuYXNjZW50IEhFQVJUXCogZmFjdG9yLCBvbiB3aGljaCBtb3N0IG9mIHRoZSBzb2NpYWwtZW1vdGlvbmFsIGl0ZW1zIGxvYWRlZCBtb2RlcmF0ZWx5IHN0cm9uZ2x5IChsb2FkaW5ncyAkXGdlcSQgMC4zMDogYHIgaXRhbF9ieV9jYXBfZnVuKGVmYV9wYXJfZDRfNDZfbW9kbG9hZCRjYXBhY2l0eVtlZmFfcGFyX2Q0XzQ2X21vZGxvYWQkYWR1bHRfZmFjdG9yID09ICJIRUFSVCIgJiBlZmFfcGFyX2Q0XzQ2X21vZGxvYWQkZmFjdG9yID09ICJGMyJdKWApLiBUaGlzIGlzIGEgc3Vic3RhbnRpYWxseSBtb3JlIGFkdWx0LWxpa2UgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgdGhhbiB3YXMgb2JzZXJ2ZWQgYW1vbmcgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAzLgoKYGBge3J9CmVmYV9wYXJfZDRfNDZfbG93bG9hZCA8LSBsb2FkaW5nc19mdW4oZWZhX3Bhcl9kNF80NiwgImxvbmciKSAlPiUgCiAgZmlsdGVyKGxvYWRpbmcgPCAwLjMwKSAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIG11dGF0ZShhZHVsdF9mYWN0b3IgPSBjYXNlX3doZW4oCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3Bhcl9kNF9hZCwgMTgsICJGMSIsICJwb3MiKSkgPT0gVCB+ICJCT0RZIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0X2FkLCAxOCwgIkYyIiwgInBvcyIpKSA9PSBUIH4gIkhFQVJUIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0X2FkLCAxOCwgIkYzIiwgInBvcyIpKSA9PSBUIH4gIk1JTkQiLAogICAgVFJVRSB+ICJubyBkb21pbmFudCBmYWN0b3IiKSkgJT4lCiAgdW5ncm91cCgpCmVmYV9wYXJfZDRfNDZfbG93bG9hZApgYGAKCmBgYHtyfQplZmFfcGFyX2Q0XzQ2X2RvbUNhcCA8LSBsb2FkaW5nc19mdW4oZWZhX3Bhcl9kNF80NiwgImxvbmciKSAlPiUgCiAgYXJyYW5nZShkZXNjKGxvYWRpbmcpKSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgbG9hZGluZykgJT4lCiAgbXV0YXRlKGFkdWx0X2ZhY3RvciA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0X2FkLCAxOCwgIkYxIiwgInBvcyIpKSA9PSBUIH4gIkJPRFkiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDRfYWQsIDE4LCAiRjIiLCAicG9zIikpID09IFQgfiAiSEVBUlQiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDRfYWQsIDE4LCAiRjMiLCAicG9zIikpID09IFQgfiAiTUlORCIsCiAgICBUUlVFIH4gIm5vIGRvbWluYW50IGZhY3RvciIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShmYWN0b3IsIGRlc2MobG9hZGluZykpCmVmYV9wYXJfZDRfNDZfZG9tQ2FwCmBgYAoKSG93ZXZlciwgYXMgaW4gU3R1ZHkgMywgdGhlIHZlcnkgZmFjdCB0aGF0IGRpZmZlcmVudCBhcHByb2FjaGVzIHRvIGZhY3RvciByZXRlbnRpb24geWllbGRlZCBkaWZmZXJlbnQgcmVzdWx0cyBpcyBmdXJ0aGVyIGV2aWRlbmNlIHRoYXQsIGFsdGhvdWdoIHRoZXJlIGlzIHNvbWUgZXZpZGVuY2UgZm9yIGEgbmFzY2VudCBCT0RZLUhFQVJULU1JTkQgZnJhbWV3b3JrIGFtb25nIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4sIHRoaXMgZnJhbWV3b3JrIHdhcyBub3Qgcm9idXN0IGFtb25nIHByZXNjaG9vbC1hZ2UgY2hpbGRyZW4uIAoKVGhpcyBhcHBlYXJzIHRvIGJlIHBhcnRpY3VsYXJseSB0cnVlIHdpdGggcmVnYXJkIHRvIHRoZWlyIHVuZGVyc3RhbmRpbmcgb2Ygc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKEhFQVJUKS4gRWNob2luZyB0aGUgcmVzdWx0cyBvZiBTdHVkeSAzLCBjaGlsZHJlbuKAmXMgcmVzcG9uc2VzIHN1Z2dlc3QgdGhhdCB0aGV5IG1heSBub3QgY29uc2lkZXIgdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYXQgY29uc3RpdHV0ZSB3aGF0IEkgaGF2ZSBjYWxsZWQgSEVBUlQgYW1vbmcgYWR1bHRzIHRvIGhhbmcgdG9nZXRoZXIgYXMgb25lLCBjbGVhcmx5IGRpc3RpbmN0IGNvbXBvbmVudCBvZiBtZW50YWwgbGlmZS4gRXZlbiBpbiB0aGUgbW9yZSBhZHVsdC1saWtlLCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIHR3byBvZiB0aGUgc2l4IHNvY2lhbC1lbW90aW9uYWwgaXRlbXMgZGlkIF9ub3RfIGxvYWRpbmcgc3Ryb25nbHkgb24gdGhlIG9zdGVuc2l2ZSBIRUFSVFwqIGZhY3RvciAobG9hZGluZ3MgJFxsZXEkIDAuMzA6IGByIGl0YWxfYnlfY2FwX2Z1bihlZmFfcGFyX2Q0XzQ2X2xvd2xvYWQkY2FwYWNpdHlbZWZhX3Bhcl9kNF80Nl9sb3dsb2FkJGFkdWx0X2ZhY3RvciA9PSAiSEVBUlQiICYgZWZhX3Bhcl9kNF80Nl9sb3dsb2FkJGZhY3RvciA9PSAiRjMiXSlgKTsgYW5kIGZvdXIgb2YgdGhlIHNpeCBzb2NpYWwtZW1vdGlvbmFsIGl0ZW1zIGxvYWRlZCBtb2RlcmF0ZWx5IHN0cm9uZ2x5IG9uIHRoZSBNSU5EIGZhY3RvciAobG9hZGluZ3MgJFxnZXEkIDAuMzA6IGByIGl0YWxfYnlfY2FwX2Z1bihlZmFfcGFyX2Q0XzQ2X21vZGxvYWQkY2FwYWNpdHlbZWZhX3Bhcl9kNF80Nl9tb2Rsb2FkJGFkdWx0X2ZhY3RvciA9PSAiSEVBUlQiICYgZWZhX3Bhcl9kNF80Nl9tb2Rsb2FkJGZhY3RvciA9PSAiRjIiXSlgKS4gSW5kZWVkLCBNSU5EIHdhcyB0aGUgX2RvbWluYW50XyBmYWN0b3IgZm9yIHR3byBzb2NpYWwtZW1vdGlvbmFsIGl0ZW1zIGluIHRoaXMgdGhyZWUtZmFjdG9yIHNvbHV0aW9uIChgciBpdGFsX2J5X2NhcF9mdW4oZWZhX3Bhcl9kNF80Nl9kb21DYXAkY2FwYWNpdHlbZWZhX3Bhcl9kNF80Nl9kb21DYXAkZmFjdG9yID09ICJGMiIgJiBlZmFfcGFyX2Q0XzQ2X2RvbUNhcCRhZHVsdF9mYWN0b3IgPT0gIkhFQVJUIl0pYCkuIE5vbmUgb2YgdGhlc2Ugb2JzZXJ2YXRpb25zIHdlcmUgdHJ1ZSBhbW9uZyBhZHVsdHMuCgoKIyBHZW5lcmFsIGRpc2N1c3Npb24gb2YgY29uY2VwdHVhbCB1bml0cwoKX19YWCBBREQgREVTQ1JJUFRJT04gT0YgU1RVRFkgMV9fCgpJbiB0aHJlZSBsYXJnZS1zY2FsZSBzdHVkaWVzICh0b3RhbCBfTl89YHIgbnJvdyhkMl83OV93aWRlKSArIG5yb3coZDNfNzlfd2lkZSkgKyBucm93KGQzXzQ2X3dpZGUpICsgbnJvdyhkNF80Nl93aWRlKS8yYCBjaGlsZHJlbiBhbmQgYHIgbnJvdyhkMl9hZF93aWRlKSArIG5yb3coZDNfYWRfd2lkZSkgKyBucm93KGQ0X2FkX3dpZGUpLzJgIGFkdWx0cyksIEkgc2V0IG91dCB0byBleHBvcmUgdGhlIGRldmVsb3BtZW50IG9mIFVTIGNoaWxkcmVuJ3MgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgYmV0d2VlbiA0LTl5IG9mIGFnZS4gVGhlc2Ugc3R1ZGllcyBzdWdnZXN0IHRoYXQgdGhlc2UgcmVwcmVzZW50YXRpb25zIHVuZGVyZ28gc3Vic3RhbnRpYWwgZGV2ZWxvcG1lbnQgb3ZlciB0aGUgY291cnNlIG9mIGVhcmx5IGFuZCBtaWRkbGUgY2hpbGRob29k4oCUaW4gdHdvIGRpc3RpbmN0IHNlbnNlcy4gCgpGaXJzdCwgYW5hbHlzZXMgb2YgdGhlIGNvcnJlbGF0aW9uYWwgc3RydWN0dXJlIG9mIGNoaWxkcmVuJ3MgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyAodmlhIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcykgc3VnZ2VzdGVkIGNoYW5nZXMgaW4gb250b2xvZ2ljYWwgX3N0cnVjdHVyZV8uIEJldHdlZW4gZWFybHkgY2hpbGRob29kICg0LTYgeWVhcnM7IFN0dWRpZXMgMy00KSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAoNy05IHllYXJzOyBTdHVkaWVzIDItMyksIGNoaWxkcmVuJ3Mgc2Vuc2Ugb2Ygd2hpY2ggbWVudGFsIGNhcGFjaXRpZXMgImdvIHRvZ2V0aGVyIiBzZWVtcyB0byB1bmZvbGQgaW50byBhIGhpZ2hlci1kaW1lbnNpb25hbCBzcGFjZSwgY2hhcmFjdGVyaXplZCBieSBzdHJvbmdlciBkaWZmZXJlbnRpYXRpb24gb2YgdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYXQgSSBoYXZlIGNhbGxlZCBIRUFSVCBmcm9tIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgb2YgdGhlIEJPRFkgYW5kIHRoZSBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgb2YgdGhlIE1JTkQuIAoKIyBDaGFwdGVyIGNvbmNsdXNpb24KCl9fWFggQUREIENIQVBURVIgQ09OQ0xVU0lPTl9fCgoKIyBUTyBETyBMSVNUCgotIHJlYWQgdGhyb3VnaAotIGFkZCByZWZlcmVuY2VzIHRvIHRhYmxlMy4yCi0gYWRkIGRpc2N1c3Npb24gb2YgInNpemUiIG9mIGZhY3RvcnMgKHJlZmVyIHRvIGZpZ3VyZTMuNSkKLSB3cml0ZSBjaGFwdGVyIGNvbmNsdXNpb24KCg==